在JPA中请优先使用sequence策略生成实体标识符的值 - Vlad Mihalcea


使用数据库sequence是最有效的Hibernate标识符/主键生成策略,因为能利用自动JDBC批处理机制
注释实体使用@Id和@GeneratedValue,@Id是强制性的,@Id必须被映射到具有唯一约束的表列。通常,@Id注释应映射到“主键”表列。
如果不使用@GeneratedValue注释,必须手工赋值实体标识符,而使用@GeneratedValue由JPA自动生成实体表示符时,需要一些策略。

public class Post {
 
    @Id
    @GeneratedValue(
        strategy = GenerationType.SEQUENCE
    )
    private Long id;


GenerationType枚举定义了四个实体标识符生成策略:

  • IDENTITY允许使用表标识列,例如MySQL AUTO_INCREMENT。对于JPA和Hibernate,如果关系数据库支持SEQUENCE(下面的第二种),则应该优先使用SEQUENCE而不是IDENTITY,因为在使用IDENTITY生成器持久保存实体时,Hibernate无法使用自动JDBC批处理。
  • SEQUENCE允许使用数据库序列对象生成标识符值。当使用JPA和Hibernate时,这是最佳的生成策略。
  • TABLE使用单独的表模拟数据库序列生成器。这是一个糟糕的策略,您不应该使用它。
  • AUTO 根据基础数据库功能选择任何先前的策略。

具体点击标题见原文