java - Hibernate - 从数据库中获取序列号,防止并发期间的重复键
问题描述
我有一个情况维护一个遗留项目,使用 JSF/Primefaces/Hibernate,数据库是 DB2,原始代码从 Delphi 迁移到 Java,但保留数据库结构,因为它来自供应商(我们无法更改) . 有一些表用于获取顺序 ID(之后是SELECT MAX和UPDATE)。
表结构有一个复合键(年份和数字),今天的问题是:我们从参数表(它保存“下一个顺序”值)中选择基于年份的最大数字。有时使用并发的用户会得到相同的数字,在尝试持久化重复键时会导致错误。
我尝试实现一个Hibernate 拦截器以在该方法期间获取和设置值onSave
,但我无法使其避免重复键问题(尝试将其用作SessionFactory-scoped
)。我也尝试使方法同步,但它也不起作用。
有没有办法使用 Hibernate 功能来防止这个重复的关键问题(以编程方式,无需更改数据库)?
提前致谢!
解决方案
推荐阅读
- android - 如何在android中为矢量图像添加渐变颜色并在底部导航视图中使用
- c - #C #string #array 如何用 C 编程这个项目?
- java - set_timerslack_ns 写入失败:不允许操作。Android MapFragment
- python - 如何在使用 .rstrip() 删除 \r\n 时防止出现空格
- ruby-on-rails - Sidekiq_options 为 Sidekiq 6.0.3 提供“Sidekiq::Worker 不能包含在 ActiveJob 中:”
- javascript - HTML 页面上的 Google Cloud Speech API
- python - 保护 Typeform Webhook Python
- django - Django - 单元测试中代码重复的方法
- flutter - 小部件的“const”是否只需要在有状态的小部件中使用?
- logstash - 如何在弹性云的logstash服务中创建管道