首页 > 解决方案 > Hibernate - 从数据库中获取序列号,防止并发期间的重复键

问题描述

我有一个情况维护一个遗留项目,使用 JSF/Primefaces/Hibernate,数据库是 DB2,原始代码从 Delphi 迁移到 Java,但保留数据库结构,因为它来自供应商(我们无法更改) . 有一些表用于获取顺序 ID(之后是SELECT MAXUPDATE)。

表结构有一个复合键(年份和数字),今天的问题是:我们从参数表(它保存“下一个顺序”值)中选择基于年份的最大数字。有时使用并发的用户会得到相同的数字,在尝试持久化重复键时会导致错误。

我尝试实现一个Hibernate 拦截器以在该方法期间获取和设置值onSave,但我无法使其避免重复键问题(尝试将其用作SessionFactory-scoped)。我也尝试使方法同步,但它也不起作用。

有没有办法使用 Hibernate 功能来防止这个重复的关键问题(以编程方式,无需更改数据库)?

提前致谢!

标签: javahibernateinterceptor

解决方案


推荐阅读