我正在编写一个系统,该系统包含一个名为的休眠管理实体Voucher
,该实体具有一个名为 的字段,该字段为凭证实例的唯一现有有效副本serialNumber
保存一个唯一编号。数据库表中也可能存在旧的无效副本,这意味着数据库字段可能未声明为唯一的。保存新的有效凭证实例(需要新的序列号)的操作首先在适当的实体上同步。此后整个过程被封装在一个事务中,新值由 JPQL 获取
SELECT MAX(serialNumber) + 1 FROM Voucher
该字段从查询中获取结果,然后保存实例,刷新会话,提交事务,代码最终离开同步块。
尽管如此,数据库有时(如果很少)以带有重复序列号的凭证结束。
我的问题是:考虑到我对同步和事务处理相当有信心,是否有什么或多或少明显的我应该知道我错过的休眠,或者我应该回到另一个调试会话,试图找到任何东西否则会导致问题吗?
运行保存进程的服务是一个运行在tomcat6上的web应用,由Spring的HttpRequestHandlerServlet
. db 连接由 C3P0 汇集,运行非常基于默认的配置。
我会很感激任何建议
谢谢