我正在使用Spring AOP + hibernate事务管理器来管理我的事务。在我的生产环境中,由于某些作业并行运行,我遇到了无法获取锁定异常。
我有一个标题表和一个项目,当我尝试插入标题表时,项目通过休眠级联功能自动插入。因此,当我在项目表上遇到 CannotAcquireLockException 时,即使它们在同一事务中,唯一的标头也会被保存而不是项目。
不幸的是,我不应该分享我的代码,但如果您需要任何详细信息,请告诉我。
当我收到任何其他异常时,事务正在回滚。
这是一个明确的僵局情况。这更与数据库错误有关,而不是类的休眠/弹簧问题。我遇到了类似的情况,一个线程正在执行选择,而另一个线程正在尝试插入/更新同一行。一些快速的解决方案。
- 使用选择..对于更新sql查询:这通常会获取特定索引上的锁,直到操作完成。
- 在数据库端:创建索引也有帮助。
希望这有帮助。更多细节在这里