jpa中主要有以下几种id生成策略 (这里以MySql数据库为例,因此不包括sequence策略):
1、普通的自增长id生成策略:
@GeneratedValue 不指定参数,该id生成策略类似于hibernate中的native策略,有数据库自身决定id值。
2、table生成策略:
在数据库中专门生成一张表来记录某张表下一条记录的id,该表的结构大概是下面这样:
COLUMN_NAME NEXT_ID
------------------------------------------------
Person 2
User 2
...
其中Person和User都是对于某张表的标识。具体配置如下所示:
@Id
@TableGenerator(
name="person_table_id_gen", //策略生成器的名称
table="t_id_gen", //记录id的表名称
pkColumnName="ID_COLUMN_NAME", //用于存储指定表的标识,例如Person表,User表等
valueColumnName="NEXT_ID", //存储下一条记录的id
pkColumnValue="Person",
allocationSize=1 //id增长的步进值
)
@GeneratedValue(generator="person_table_id_gen" , strategy=GenerationType.TABLE)
另外,还有一种id生成策略,但是这个生成策略与服务器有关,由于JBOSS关于jpa的底层实现是使用hibernate,所以,
在JBOSS中可以使用该种生成策略,但是在别的应用服务器中不能使用。
uuid生成策略:
@Id @GenericGenerator(name="myuuid" , strategy="uuid") @GeneratedValue(generator="myuuid")
这种策略只能在JBOSS服务器中使用。如果使用这种策略的话,id必须声明为String类型。