我真的很难理解为什么is @generatedValue用于自动递增,而表已经提供了auto_increment。能给我解释一下吗?
发布于 2019-05-16 03:35:17
@GeneratedValue
用于通知JPA提供者特定的字段应该接收生成的值。然后,基于传递给@GeneratedValue
注释的GenerationType
,提供者将决定如何将值分配给主键,例如,通过将其委托给某个数据库机制。
例如,oracle数据库需要序列来获取生成的主键的值,因此在使用oracle数据库的情况下,您需要将GenerationType.SEQUENCE
传递给@GeneratedValue
,并且您还必须创建这样的序列。
对于MySQL数据库,您将传递GenerationType.IDENTITY
,并在其下面使用MySQL表中的主键列的AUTO_INCREMENT
。
正如GenerationType.IDENTITY
的文档所说:
标识指示持久性提供程序必须使用数据库标识列为实体分配主键。
我们需要所有这些注释,因为JPA只是一个使用关系数据库的抽象,它可以使用不同的数据库,这些数据库使用不同的机制。Hibernate只是JPA的实现之一。
https://stackoverflow.com/questions/56156185
复制相似问题