JPA,HIBERNATE。如何从@TableGenerator获取下一个值

时间:2016-08-31 13:35:55

标签: java hibernate jpa

我有一个具有以下主键生成策略的实体类

@Id
@Column(name = "id", nullable = false)
@TableGenerator(name = "USERGENERATOR", table = "my_sequences", pkColumnName = "sequence_name", pkColumnValue = "user_id", valueColumnName = "next_value")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "USERGENERATOR")
protected Integer id;

这个工作正常,直到我需要使用本机查询插入新行的新要求。由于实体继承策略(@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)),主键列不使用auto_increment。

我想知道是否有办法使用EntityManager向表生成器请求下一个值。

2 个答案:

答案 0 :(得分:0)

我认为您不能通过任何公共API访问@TableGenerator,但使用本机SQL获取下一个值很容易。只需使用这两个查询:

-- get the current value
select next_value from my_sequences where sequence_name = 'user_id';
-- update value
update my_sequences set next_value = next_value + 1;

如果@TableGenerator同时获取下一个值,则存在冲突风险。

答案 1 :(得分:0)

添加新元素时,您需要像@GeneratedValue(strategy = GenerationType.TABLE, generator = "USERGENERATOR")这样更改@GeneratedValue(strategy = GenerationType.IDENTITY),它会添加1个自动