作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个具有以下主键生成策略的实体类
@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;
在我需要使用 native 查询插入新行的新需求出现之前,这一直运行良好。由于实体继承策略 (@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)) 到位,主键列不使用 auto_increment。
我想知道是否有办法使用 EntityManager 向表生成器询问下一个值。
最佳答案
我认为您无法通过任何公共(public) API 访问 @TableGenerator
,但使用 native 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
同时获取下一个值,则存在冲突的风险。
关于java - JPA, hibernate 。如何从@TableGenerator 获取下一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251174/
我是一名优秀的程序员,十分优秀!