我真的很难理解为什么当表已经提供 auto_increment 时还要使用 @ generatedValue 来自动递增。有人可以向我解释一下吗?
最佳答案
@GenerateValue
用于通知 JPA 提供者特定字段应该接收生成的值。然后,根据传递给 @GenerateValue
注释的 GenerationType
,提供程序将决定如何为主键分配值,例如将其委托(delegate)给某种数据库机制。
例如,Oracle 数据库需要序列来获取主键的生成值,因此在使用 Oracle 数据库的情况下,您可以将 GenerationType.SEQUENCE
传递给 @GenerateValue
,然后您将也必须创建这样的序列。
如果是 MySQL 数据库,您将传递 GenerationType.IDENTITY
,并在其下面使用 MySQL 表中主键列的 AUTO_INCRMENT
。
正如 GenerationType.IDENTITY
的文档所述:
IDENTITY Indicates that the persistence provider must assign primary keys for the entity using a database identity column.
我们需要所有这些注释,因为 JPA 只是使用关系数据库的抽象,它可以与使用不同机制的不同数据库一起使用。 Hibernate只是JPA的实现之一。
关于java - 如果数据库表列设置为 auto_increment 那么我们为什么要使用 @ generatedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156185/