我已经在我的界面中应用了@Transactional,在我的serviceImpl中,相应的方法是调用其他一些方法,一个方法是读取,另一个方法是写入。尽管我已注释为事务性,但当我发出并发请求时,我的插入方法抛出org.hibernate.exception.LockAcquisitionException:
错误。 另一个问题是,这个插入方法是一个共享方法,它执行像Dao.save(obj(这样的插入方法。Dao.save(( 是一个通用方法 所以我在这里什么也做不了。我必须在接口上应用一些东西以避免没有锁定异常。 是否可以告诉等待直到锁定被获取?或者如果交易失败,请重试?或者锁定所有表,直到事务完成,以便另一个请求无法访问相关资源? 我的休眠版本是3.x,数据库是mysql 5.6
最好的方法是,
- 将方法标记为事务性
- 在 mysql 数据库设置中,将事务隔离级别设置为SERIALIZABLE