Hibernate处理id分配而不是数据库



我在一个表中有一个自动增量PK,我想hibernate来处理id分配而不是数据库。根据我的理解,@GeneratedValue(strategy = GenerationType.IDENTITY)允许数据库在每次插入操作时生成一个新值。那么我们有什么不同的解决方案来处理它吗?

JPA提供了4种不同的方法来生成主键值

汽车:GenerationType。AUTO是默认的生成类型,它允许持久性提供程序选择生成策略。

的例子:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

标识:它依赖于一个自动递增的数据库列,并允许数据库在每次插入操作时生成一个新值。

的例子:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

序列:对于这种类型,Hibernate从数据库序列请求主键值。

的例子:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "book_generator")
@SequenceGenerator(name="book_generator", sequenceName = "book_seq", allocationSize=50)
private Long id;

表:它通过在数据库表中存储和更新序列的当前值来模拟序列,这需要使用悲观锁它把所有的事务按顺序排列。

的例子:

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "book_generator")
@TableGenerator(name="book_generator", table="id_generator", schema="bookstore")
private Long id;

我更喜欢使用GenerationType。SEQUENCE,因为它非常有效,并且允许Hibernate决定何时执行插入语句。这提供了使用其他性能优化技术(如JDBC批处理)所需的灵活性。

详细信息请查看此链接。

最新更新