通过注释来映射hibernate实体的,基于hibernate注释的主键标识为@ id,
其生成规则由@GeneratedValue设定的。这里的@ id和@GeneratedValue都是JPA的标准用法,
JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出。
目标({方法,字段}) @Retention(运行时) 公共@ interface GeneratedValue { GenerationType策略()默认的汽车; 字符串生成器()默认””; } >之前其中GenerationType:
公共enum GenerationType { 表, 序列, 的身份, 汽车 } >之前JPA提供的四种标准用法为表、序列,身份,汽车。
-
<李>表:使用一个特定的数据库表格来保存主键。李>
<李>序列:根据底层数据库的序列来生成主键,条件是数据库支持序列。李>
<李>标识:主键由数据库自动生成(主要是自动增长型)李>
<李>汽车:主键由程序控制。李>
表比较复杂,这里不讲解。分别介绍其他三个:
<强> 1。序列强>
实体类中的注解
@ id @GeneratedValue(策略=GenerationType.SEQUENCE发电机=癮aa”) generator(名称=" aaa " sequenceName=皊eq_payment”)
generator定义
@Target(}{类型、方法、字段) @Retention(运行时) 公共@ interface SequenceGenerator { 字符串名称(); 字符串sequenceName()默认””; int initialValue()默认0; int allocationSize()默认50; } >之前
-
<李>名称属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“发电机”值中。李>
<李> sequenceName属性表示生成策略用到的数据库序列名称。李>
<李> initialValue表示主键初识值,默认为0。李>
<李> allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。李>
<强> 2。身份强>
主键则由数据库自动维护,使用起来很简单
@ id @GeneratedValue(策略=GenerationType.IDENTITY)
<强> 3、汽车强>
默认的配置。如果不指定主键生成策略,默认为汽车。
@ id @GeneratedValue(策略=GenerationType.AUTO)
hibernate提供多种主键生成策略,有点是类似于JPA、有的是hibernate特有,下面列出几个hibernate比较常用的生成策略:
-
<李>本地:对于oracle采用序列方式,对于MySQL和SQL Server采用身份(自增主键生成机制),本地就是将主键的生成工作交由数据库完成,hibernate不管李>
<李> uuid:采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。占用空间大(字符串类型)。李>
<李>分配:在插入数据的时候主键由程序处理(即程序员手动指定),这是& lt; generator>元素没有指定时的默认生成策略。等同于JPA中的汽车。李>
<李>标识:使用SQL Server和MySQL的自增字段,这个方法不能放到甲骨文中,Oracle不支持自增字段,要设定序列(MySQL和SQL Server中很常用)。等同于JPA中的单位。李>
<李>增量:插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。李>
hibernate提供了多种生成器供选择,基于注释的方式通过@GenericGenerator实现。
hibernate每种主键生成策略提供接口org.hibernate.id.IdentifierGenerator的实现类,如果要实现自定义的主键生成策略也必须实现此接口。
公共接口IdentifierGenerator {/* * *配置参数实体名称 */公共静态最终字符串ENTITY_NAME=癊NTITY_NAME”;/* * *生成一个新的标识符。 * @param会话 * @param对象的实体或顶层的集合id被生成 * * @return新标识符 * @throws HibernateException */公众可序列化的生成(SessionImplementor会话对象对象) HibernateException扔; } >之前IdentifierGenerator提供一生成方法,生成方法返回产生的主键。
理解JPA注解@GeneratedValue的使用方法