数据的唯一性是很平常的要求,但是如果框架不能提供相关的控制而由程序员完全控制是很危险的,在JPA中,有下面四种策略。
A.容器自动生成---GeneratorType.AUTO
由JPA自动生成
B.使用数据库的自动增长字段生成---GenerationType.IDENTITY
JPA 容器将使用数据库的自增长字段为新增加的实体对象赋唯一值。这种情况下需要数据库提供对自增长字段的支持,SQL Server、MySQL、DB2、Derby等支持。
C.根据数据库序列号(Sequence)生成 ---GenerationType.SEQUENCE
表示使用数据库的序列号为新增加的实体对象赋唯一值。这种情况下需要数据库提供对序列号的支持常用的数据库中,Oracle支持。
D.使用数据库表的字段生成---GenerationType.TABLE
表示使用数据库中指定表的某个字段记录实体对象的标识,通过该字段的增长为新增加的实体对象赋唯一值
比较特殊的地方
1. 使用UUID(两个不同实现版本Hibernate和OpenJPA有点不同)
OpenJPA
@GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid")
Hibernate(Eclipse会提示错误,但是程序是可以运行的)
@GenericGenerator(name = "test", strategy = "uuid")
@GeneratedValue(generator = "test")
其实这两种办法我感觉都不是特别好,因为他们跟实现有关系,将来如果要迁移的话会比较麻烦,所以可以直接用java