在java开发中,用Jpa 做持久层 使用的数据库是oracle 关于主键生成策略,及注解是怎样使用的?

2025-04-26 23:55:44
推荐回答(2个)
回答1:

两种方式:
方式1:假设Bean的属性xxx为主键,则在getXxx() 前添加以下注解
@Id
@SequenceGenerator(name="名称A", sequenceName="库中已存在的sequence名称",allocationSize=递增值)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="名称A")

方式2:假设Bean的属性xxx为主键,则在getXxx() 前添加以下注解
@Id
@TableGenerator(name="名称A",allocationSize=递增值)//若不指定递增值,则生成的主键值不一定连续
@GeneratedValue(strategy=GenerationType.TABLE, generator="名称A")

总结:方式1:针对Oracle效率略高,但需要手工创建sequence才能使用。
方式2:不依赖数据库,可移植性好,但相比方式1,效率略低。

回答2:

oracle自增 使用sequence,代码如下
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")