Hibernate:更新表生成器

时间:2015-10-26 13:19:58

标签: java sql-server database hibernate

有没有办法告诉Hibernate首先检查表生成器生成的当前主键是否可用或过时?

我有一个应用程序,它使用hibernate在我的数据库中的几个表中创建新条目,但有时这些生成的值已过时并已使用。发生这种情况是因为该数据库被很多应用程序和脚本使用,其中一些使用“select MAX(ID)+1”-Keygeneration“策略”。更改所有其他组件以使用表生成器并不是一个真正的选项(虽然它可以解决问题),所以我必须确保从表生成器获得的值确实可用。

有没有办法告诉Hibernate在尝试将新记录插入数据库之前检查生成的值的有效性(并抛出ConstraintViolationException)? 或者,有没有办法在hibernate使用它们生成新的ID之前手动更新生成器表?

显而易见的方法是运行像UPDATE pk_generator SET value=(SELECT MAX(ID)+1 from members) WHERE column='members'

这样的原生查询

1 个答案:

答案 0 :(得分:0)

使用saveOrUpdate()保存对象时,如果是创建操作,则会使用自动生成的ID更新对象ID字段。因此它永远不会与已生成和使用的id冲突。