Hibernate实体类编写规则和主键生成策略

ATA考试系统DEMO版:本地化轻量级监考沙箱解析 考试系统是教育与企业测评中的基础技术设施,其核心在于保障考试过程的可控性、防作弊性与离线可靠性。传统B/S架构在无网机房、局域网考场等场景下常面临CORS限制、权限管控弱、无法操作系统级行为等瓶颈。本方案采用Electron+Express+SQLite技术栈,构建端到端闭环的本地化考试沙箱,实现考生端防切屏、剪贴板监控、屏幕录制拦截,以及监考端实时状态感知与行为告警。尤其适合高校实训模拟、企业内训笔试等80人以内封闭考场场景,兼顾部署极简性与监考逻辑深度可定制性。 阅读详情

1 Hibernate持久化类(实体类)编写规则

1.1 什么是持久化类

Hibernate是持久层的ORM映射框架,专注于数据的持久化工作。所谓的持久化,就是将内存中的数据永久地存储到关系型数据库中。而持久化类,就是一个Java类与数据库表建立了映射关系(即Java类有了一个映射文件与数据库的表建立关系),那么这个类就称为持久化类。

1.2 持久化类的编写规则

  • 持久化类需要提供无参数的构造方法。

  • 持久化类的属性需要私有,对私有的属性提供共有的get和set方法。(因为在Hibernate底层会将查询的数据进行封装)

  • 持久化类的属性要尽量使用包装类的类型。(因为包装类和基本数据类型的默认值不同,包装类的类型语义描述更清晰而基本数据类型不容易描述)

假设表中有一列学生成绩,使用int类型,如果某个学生得了0分,则int score=0;而若是某个学生缺考,又int score=0;不能准确表示该学生是否参加了考试。而使用包装类就可以清晰表达:Integer score=0表示学生得0分;Integer score=null表示学生没有参加考试。

八个基本数据类型及其对应的包装类:

基本数据类型包装类
intInteger
charCharacter
booleanBoolean
floatFloat
doubleDouble
shortShort
longLong
byteByte
  • 持久化类要有一个唯一的标识OID与表的主键对应。(因为Hibernate中需要通过这个唯一的标识OID区分在内存中是否是同一个持久化类。在java中通过地址区分是否是同一个对象的,在关系型数据库的表中是通过主键区分是否是同一条记录。Hibernate就是通过这个OID来进行区分的。Hibernate是不允许在内存中出现两个OID相同的持久化对象的。)
  • 持久化类尽量不要使用final进行修饰。(因为Hibernate中有延迟加载机制,这个机制中会产生代理对象,Hibernate是使用字节码的增强技术产生代理对象的,其实就是产生了当前类的一个子类对象实现的。如果使用final修饰持久化类,那么就不能产生子类,从而就不会产生代理对象,Hibernate的延迟加载策略就会失效。)

2 Hibernate主键生成策略

2.1 主键的类型

  • 自然主键
    把具有业务含义的字段作为主键,这个主键就称为自然主键。如在客户表中,把name字段作为主键,其前提条件是每一个客户的姓名不允许为null,且不允许重名,更不允许被修改。
  • 代理主键
    把不具备业务含义的字段作为主键,这个主键就称为代理主键。该字段一般取名为”ID“,通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间。

对比之下,自然主键虽然可行,但是不能满足不断变化的业务需求,一旦出现了运行客户重名的业务需求,就必须修改数据类型,重新定义表的主键,这给数据库的维护增加了难度。在这种情况下,使用代理主键的方式就更合理。

2.2 主键生成策略

❀ Hibernate要求实体类里面有一个属性作为唯一值,对应表中的主键,主键可以有不同的生成策略。❀

 <!-- native:生成表id值就是主键自动增长 -->
    <generator class="native"></generator>

Hibernate中内置的常用主键生成策略如下:

名称描述
increment用于long、short、或int类型,由Hibernate自动以递增的方式生成唯一标识符,每次增量1 只有当没有其他进程向同一张表中插入数据时才可以使用,不能在集群环境下使用。适用于代理主键。
identity(MySQL)采用底层数据库本身提供的主键生成标识符,条件是数据库支持自动增长数据类型(Oracle不支持自动增长,MySQL支持)。在DB2、MySQL、MS SQL Server、Sybase、和HypersonicSQL数据库中可以使用该生成器,该生成器要求在数据库中把主键定义成自增长类型。适用于代理主键。
sequence(Oracle)Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列(Oracle支持序列,MySQL不支持)。适用于代理主键。
native(本地)根据底层数据库对自动生成标识符的能力来选择identity、sequence、hilo三种生成器中的一种,适合跨数据库平台开发。适用于代理主键。(native可以根据使用的数据库选择值,identity或是sequence)
uuidHibernate采用128位的UUID算法生成标识符。该算法能够在网络环境中生成唯一的字符串标识符,其UUID被编码成一个长度为32位的十六进制字符串。这种策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。适用于代理主键。
assigned由Java程序负责生成标识符,如果不指定id元素的generator属性,则默认使用该主键生成策略。适用于自然主键。

2.3 uuid生成策略演示

注意:在使用uuid生成策略时,实体类的id属性类型必须是字符串类型。

private String uid;
<generator class="uuid"></generator>

执行添加操作之后自动生成的随机的唯一的uid值:
在这里插入图片描述
生成的uid是字符串类型,同时是主键:
在这里插入图片描述

Keil v5.11给STM32烧录程序记录 1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ... 阅读详情

相关推荐

模糊控制——基本原理(附MATLAB程序)

模糊化:使用隶属函数将实际输入转换为模糊集合的隶属度值。规则库:利用“如果-那么”规则将模糊输入映射到模糊输出。推理机制:通过规则的模糊化和模糊集合的合成,生成模糊输出。去模糊化:将模糊输出转换为具体的控制信号,常用的方法包括质心法和最大隶属度法。这些步骤综合起来,实现了模糊控制系统对复杂和不确定系统的有效控制。模糊控制系统通过结合模糊逻辑和规则库来处理复杂系统中的不确定性和模糊性。它的核心在于模糊集合和隶属函数,通过推理机处理模糊规则,并最终通过去模糊化生成具体的控制信号。

qq_35623594的博客 5552

Hibernate基础学习之实体类(持久化类)的编写规则及相关操作(CRUD)

实体类与表名一一对应,类中的属性与表中的列名(column)一一对应,中类名.hbm.xml中配置;编写规则(1)实体类中的属性都是private私有的;(2)私有属性的setter和getter方法都是共有的public;(3)要求实体类必须要有一个属性作为唯一值(需要与表中的主键primary key对应);(4)实体类属性建议不使用基本数据类型,而是使用基本数据类型所对应的包装类;     ...

sysu_hh的博客 855

linux下使用Ollama本地部署LLM

Ollama 是一个用于在本地运行大语言模型(如 Llama 2、Mistral、Gemma、Qwen 等)的工具,支持模型的拉取、运行、管理等功能。当你运行ollama。

u013218342的博客 1648

JPA 注解及主键生成策略使用指南

JPA 注解及主键生成策略使用指南

墨鸦的博客 1万+

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置)

本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。

weixin_30598225的博客 347

Multisim仿真电路:(十二)MOS管缓启动电路设计与优化

本文详细介绍了基于Multisim的MOS管缓启动电路设计与优化方法。通过分析米勒平台效应,探讨RC参数选择、多级设计和有源电路等技巧,有效抑制冲击电流并优化开关损耗。文章结合仿真实例,提供实用的设计策略和实际应用注意事项,帮助工程师提升电源管理系统的可靠性。

pytorch8learner的博客 231

Hibernate 实体类 主键id生成策略(全)

一、主键类型 1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性) 表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键。 例如:在person表中的身份证号,既是唯一的,又可以单独标识一个person 2.代理主键(主键不是实体中某个具体的属性,而是一个不相关的字段) 表中原本不存在的字段,且不具备业务含义的字段作为主键,称之为代理主键。更合理的方式是使用代理主键。 二、主键生成策略 主键生成策略,就是每条记录录入时,主键的生成规则。Hibernate中,提供了几个内置的主键生成

llllll_iinn的博客 2063

ObjectMapper解析JSON数据

的时候捕获的数据,往往需要结合文档所定义的类进行转换,也就是。库中的一个关键类,它的作用是将。对象之间进行相互转换。

weixin_57128596的博客 973

hibernate的实体类编写规则与主键生成策略

一、实体类的编写规则: 1、实体类中的属性是私有的 2、私有属性需要使用公开的set和get方法操作 3、私有类必须要有一个属性作为唯一值,我们一般使用Id作为这个唯一值 4、实体类中的属性不建议使用基本数据类型,一般使用数据类型对应的包装类 二、hibernate主键生成策略 1、配置文件中的主键生成策略: 2、注解方式的生成策略

未眠人的博客 1329

从零开始:用摩尔线程S4000运行开源AI项目的完整流程

本文详细介绍了如何使用摩尔线程S4000 GPU从零开始运行开源AI项目的完整流程,包括硬件选择、驱动安装、容器化环境配置以及典型AI项目的实战部署。通过性能优化技巧,显著提升推理速度,适合开发者快速上手国产GPU的AI应用开发。

weixin_29231725的博客 565

西门子S7-1200 PLC控制步进电机实战:从I/O分配到梯形图,手把手教你实现正反转与调速

本文详细介绍了如何使用西门子S7-1200 PLC控制步进电机,从硬件接线到梯形图编程,实现正反转与三档调速功能。通过I/O分配、脉冲生成逻辑和方向控制等核心步骤,帮助工程师快速掌握PLC控制步进电机的关键技术,提升工业自动化项目的实施效率。

weixin_28733777的博客 522

关于hibernate对实体类主键生成策略的注解

现象描述: 在用hibernate做练习的时候用的是注解的形式配置pojo, 在操作po的时候出现了在数据库中插入数据主键不连续的现象,然后还发现数据库中自动产生了一张表,觉得很纳闷儿,下面是插入操作的单元测试代码:import com.sunsharing.dao.impl.SomeBodyDaoImpl; import com.sunsharing.po.Address; import co

yangbo2921946188的博客 1827

数据中台:大数据平台,数据仓库(DM),数据中台之间的联系以及异同分析

大数据平台是一个技术平台。这个技术平台提供了对于大数据的分布式采集,存储,流处理和计算,实时分析等能力。在没有大数据平台前也有数据集成和管理的平台,这种平台可以实现对结构化数据本身的采集,集成和管理。 管理平台,是在原生的大数据生态的基础之上,为了更好的管理集群服务,管理集群的资源,提供灵活SRE能力和资源核算审计能力的一系列工具和合称整体架构数据中台包括数据仓库的全部内容,数据仓库为数据中台提供了数据对外提供服务的基础资源,数据中台将数据仓库建设的投入价值进行最大化,以加快数据赋能业务的速度大家都知道数据

GIS摆渡人 2124

hibernate_day02——实体类编写规则和主键生成策略

一、实体类编写规则 (1)实体类里面的属性私有的 (2)私有属性使用公开的set(设置)和get(得到)方法 (3)要求实体类有属性作为唯一值(一般使用id值); (4)实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类; ——八个基本数据类型对应的包装类:int—Integer,char—Character,其他的都是首字母大写; 举个例子:表示学生学生的分数,假如 int score;如果学生考了0分,score =0;如果学生缺考,那么也是score=0;这样就不能很好的表达意

Fiona20的博客 206

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

实体类编写规则与hibernate主键生成策略以及实体类三种状态

1、实体类里面属性私有的 2、私有属性使用公开的set和get方法操作 3、实体类中的属性类型尽量都使用包装类,而不是用基本数据类型 八个基本数据类型对应的包装类 int-Integer char-Character 其他的都是首字母大写 比如double-Double hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以有不同的生成策略 hibern

Daydream Mr.的博客 1021

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hibernate_day02_02_实体类编写规则和03_hibernate主键生成策略

实体类编写规则 1 实体类里面属性私有的 2 私有属性使用公开的set和get方法操作 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的包装类 - int – Integer - char—Character、 - 其他的都是首字母大写 比如 doubl

huanglianggu的专栏 225

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hibernate的实体类entity(model)的编写规则

我们在使用Hibernate时,书写了一个User类,这个类我们称为JavaBean JavaBean可以简单的理解成提供私有属性,并提供私有属性的get/set方法 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans 我们也称为模型,在Hibernate中,又称这种类为实体,因为是与表关联的 编写规则 ...

weixin_41298572的博客 1251

Hibernate笔记(二)主键生成策略、缓存、事务操作、关于查询的api

hibernate-day02 1.实体类编写规则 1.实体类的属性要是私有的 2.私有属性使用公开的set,get方法操作 3.要求实体类有属性作为唯一值(一般用id) 4.实体类属性建议不使用基本数据类型,而是使用包装类 (1)八个基本数据类型对应包装类 int-Integer char-Character …等等 2hibernate主键生成策略 hibernate要求实体类里面有一个属性作为唯一值, hibernate主键生成策略有很多值: increment 用于lon

codinglover5的博客 295

hibernate学习之实体类以及crud操

实体类的编写规则 1.实体类的属性是私有的 2.私有属性要使用公开的get,set方法 3.要求实体类有属性作为唯一值(一般使用id值) 4.实体类属性建议不使用基本数据类型,而是使用基本数据类型对应的包装类 (1)八个基本数据类型的包装类 -int ——Integer -char——Character -其他都是首字母大写比如 double——Double (2)比如表

淘技术 444

重拾Hibernate框架——实体类、主键生成策略、session绑定本地线程

目录目录 实体类持久化类的编写规则 Hibernate主键生成策略 实体类操作 案例准备 对实体类CRUD操作 添加操作 查询操作 修改操作 删除操作 saveOrUpdate方法 实体类对象状态实体类(持久化类)的编写规则 属性私有化,即private修饰; 属性提供getter和setter方法; 要求实体类提供一个属性,并作为唯一值(一般使用ID值); 实体类属性建议使用基本数据类型对应的包装

梦空间 1269

hibernate

hibernate入门和基本操作

qq_43501462的博客 9105

Hibernate框架之hbm.xml映射文件(详解)

在上一篇博客 Hibernate框架之第一个Hibernate项目介绍了如何创建一个Hibernate项目,本篇博客将介绍一下hbm.xml映射文件。 hibernate框架的主要作用将数据库的访问操作进行封装,让我们可以不使用sql语句即可更新数据库,称为“面向对象查询”(底层还是sql实现)。所谓面向对象查询,就是我们只关注模型以及模型对应的属性,并不关心表以及表中的字段。这里的模型也称为实体...

hestyle的博客 3959

【教程】Hibernate 基本操作和事务

实体类编写规则 ☆ 类似于JavaBean,实体类属性是私有的 私有属性通过公开的get和set方法编辑 要求(强制)实体类有属性作为唯一值(主键),通常用id值 实体类属性建议(非强制)不使用基本数据类型,使用对应包装类 好处:Java 有8个基本数据类型,都有其对应的包装类,使用包装类可以使用NULL值,而基本数据类型不可以 HIbernate 主键生成策略 Hibernate 要求实体...

不想打代码 432

hibernate(二)

实体类编写规则 1 实体类里面属性私有的 2 私有属性使用公开的set和get方法操作 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的包装类 - int – Integer - char—Character、 - 其他的都是首字母大写...

qq_36776216的博客 370

Hibernate使用规范

文章目录实体类编写规则hibernate主键生成策略实体类操作CRUD操作实体类对象状态hibernate一级缓存hibernate的事务操作事务代码规范写法hibernate的其他API 实体类编写规则 实体类的属性都是私有的 私有属性都有公开的get,set方法来操作 要求实体类有属性作为唯一值(一般使用id值) 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 八个基本数...

weixin_44861399的博客 696

web36Hibernate笔记二

1 实体类编写规则 实体类里面属性私有的 私有属性使用公开的set和get方法操作 要求实体类有属性作为唯一值(一般使用id值) 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类 (1)八个基本数据类型对应的包装类 (2)比如 表示学生的分数,假如 int score; 比如学生得了0分 ,int score = 0; 如果表示学生没有参加考试,int score = 0;不能准确...

dream_follower的博客 155
上一篇: eclipse导入项目时可能出现的问题
下一篇: Hibernate学习之对实体类的crud操作
霓裳cc
博客等级 码龄8年 144粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值