我真的很难理解当表已经提供了auto_increment时,为什么@generatedValue用于自动递增。可以请给我解释一下。
答案 0 :(得分:0)
@GeneratedValue
用于通知JPA提供者特定字段应接收生成的值。然后,基于传递给GenerationType
批注的@GeneratedValue
,提供程序将决定如何将值分配给主键,例如通过将值委派给某种数据库机制。
例如,oracle数据库需要序列来获取主键的生成值,因此,在使用oracle数据库的情况下,您需要将GenerationType.SEQUENCE
传递给@GeneratedValue
,并且还必须创建这样的序列。
对于MySQL数据库,您将传递GenerationType.IDENTITY
,并在其下面使用MySQL表中主键列的AUTO_INCREMENT
。
GenerationType.IDENTITY
的文档中说:
身份 表示持久性提供程序必须使用数据库标识列为实体分配主键。
我们需要所有这些注释,因为JPA只是用于关系数据库的抽象,它可以与使用不同机制的不同数据库一起使用。 Hibernate只是JPA的一种实现。