如果数据库表列设置为auto_increment,那么为什么要使用@generationValue

时间:2019-05-15 19:11:20

标签: java mysql hibernate hibernate-mapping

我真的很难理解当表已经提供了auto_increment时,为什么@generatedValue用于自动递增。可以请给我解释一下。

1 个答案:

答案 0 :(得分:0)

@GeneratedValue用于通知JPA提供者特定字段应接收生成的值。然后,基于传递给GenerationType批注的@GeneratedValue,提供程序将决定如何将值分配给主键,例如通过将值委派给某种数据库机制。

例如,oracle数据库需要序列来获取主键的生成值,因此,在使用oracle数据库的情况下,您需要将GenerationType.SEQUENCE传递给@GeneratedValue,并且还必须创建这样的序列。

对于MySQL数据库,您将传递GenerationType.IDENTITY,并在其下面使用MySQL表中主键列的AUTO_INCREMENT

GenerationType.IDENTITY的文档中说:

  

身份             表示持久性提供程序必须使用数据库标识列为实体分配主键。

我们需要所有这些注释,因为JPA只是用于关系数据库的抽象,它可以与使用不同机制的不同数据库一起使用。 Hibernate只是JPA的一种实现。