加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA,HIBERNATE.如何从@TableGenerator获取下一个值

发布时间:2020-12-15 02:16:29 所属栏目:Java 来源:网络整理
导读:我有一个具有以下主键生成策略的实体类 @Id@Column(name = "id",nullable = false)@TableGenerator(name = "USERGENERATOR",table = "my_sequences",pkColumnName = "sequence_name",pkColumnValue = "user_id",valueColumnName = "next_value")@GeneratedVa
我有一个具有以下主键生成策略的实体类

@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向表生成器请求下一个值.

解决方法

我不认为您可以通过任何公共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同时获取下一个值,则存在冲突风险.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读