首页 > 解决方案 > 如何处理事务中的 Spring hibernate no lock aquired 异常

问题描述

我在我的界面中应用了@Transactional,在我的serviceImpl里面,对应的方法在调用一些其他的方法,一个方法是读,另一个方法是写。虽然我已注释为事务性,但当我发出并发请求时,我的插入方法会抛出org.hibernate.exception.LockAcquisitionException:错误。另一个问题是,这个 insert 方法是一个共享方法,它执行类似于 Dao.save(obj) 的 insert 方法。Dao.save() 是一个通用方法所以我不能在这里做任何事情。我必须在界面上应用一些东西以避免没有锁定异常。是否可以告诉等待直到获得锁定?还是交易失败时重试?还是锁定所有表直到事务完成,使另一个请求无法访问相关资源?我的休眠版本是 3.x,数据库是 mysql 5.6

标签: springhibernate

解决方案


最好的方法是,

  1. 将您的方法标记为事务性的
  2. 在您的 mysql 数据库设置中,将事务隔离级别设置为SERIALIZABLE

推荐阅读