【问题标题】:Hibernate: Update table generatorHibernate:更新表生成器
【发布时间】:2015-10-26 13:19:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java sql-server database hibernate


    【解决方案1】:

    当您使用 saveOrUpdate() 保存对象时,如果是创建操作,则对象 id 字段将使用自动生成的 id 进行更新。这样就不会和已经生成并使用过的id冲突了。

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2019-08-01
      相关资源
      最近更新 更多