hibernate主键有什么作用

2024-05-06 21:39

1. hibernate主键有什么作用

主键生成策略:
  increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。
  identity:代理主键,适合于Mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护。
  sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。
  native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。
  hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值
  uuid.hex:代理主键,hibernate采用uuid 128位算法生成基于字符串的主键值
  assign:适合于应用程序维护的自然主键

hibernate主键有什么作用

2. hibernate主键生成策略有哪些

在Hibernate中,提供了Hibernate主键生成策略。下面是比较常用的几种:
1:assigned
表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。
其缺点为在执行新增操作时,需查询数据库判断生成的主键是否已经存在。
2:increment
表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。
(1)新增数据前先查询一遍,影响了性能。 
(2)主键的类型只能为数值型的int或者long 
(3)并发操作时的冲突问题。
3:identity
不如说是为sqlerver数据库量身定做的。主要适用于sqlserver数据库的自动增长列的表。
4:native
表示根据不同的数据库采用不同的Hibernate主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用
oracle中的sequence等。区分数据库的不同是以hibernate主配置文件中sessionFactory中配置的数据库方言。