java - 确保 Hibernate session 中的唯一序列号

标签 java spring hibernate c3p0

我正在编写一个系统,该系统包含一个名为 Voucher 的 hibernate 管理实体,该实体有一个名为 serialNumber 的字段,该字段包含唯一存在的 有效副本。数据库表中也可能存在旧的无效副本,这意味着数据库字段可能未声明为唯一。 保存新的有效凭证实例(需要新的序列号)的操作首先在适当的实体上同步。此后,整个过程被封装在一个事务中,新值由 JPQL 获取

    SELECT MAX(serialNumber) + 1 FROM Voucher

字段从查询中获取结果,此后保存实例,刷新 session ,提交事务,代码最终离开同步块(synchronized block)。

尽管如此,数据库有时(如果很少)最终会出现带有重复序列号的优惠券。

我的问题是:考虑到我对同步和事务处理相当有信心,是否有任何明显的事情我应该了解我错过的 hibernate ,或者我应该返回到另一个调试 session ,尝试找到导致问题的其他原因吗?

运行保存进程的服务是一个运行在tomcat6上的Web应用程序,由Spring的HttpRequestHandlerServlet管理。数据库连接由 C3P0 汇集,运行非常基于默认的配置。

我很感激任何建议

谢谢

最佳答案

您可以使用 MultipleHiLoPerTableGenerator :它在当前事务之外生成@Id

关于java - 确保 Hibernate session 中的唯一序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783289/

相关文章:

java - Spring Hibernate无法访问服务中数据库中的实体

java - 从 hibernate 4 升级到 5.2.17 时单表继承中的 org.hibernate.WrongClassException

javascript - Apache Tomcat 错误 : 404 page not found while the other jsp runs properly

java - 面板之间可以互相通信吗?

java - spring security 不根据角色过滤对资源的访问

java - JAXB,为所有子元素设置 namespace

java - IntelliJ IDEA Community Edition 和 Spring 使用 Spring DevTools 缓慢重新加载

java - Hibernate ManyToOne,连接表中的重复键

java - 是否有可能在 4 核 Android 设备中高效地实现并行数学计算? (这个与接口(interface)无关)

java - Spring Boot Lombok 可嵌入主键日期