org.hibernate.exception.LockAcquisitionException

转载:http://www.voidcn.com/article/p-fpnqkcsb-bdo.html
org.hibernate.exception.LockAcquisitionException: could not insert: [com.yinhoo.elink.domain.UserRole]



                   org.springframework.dao.CannotAcquireLockException: could not insert:

[com.yinhoo.elink.domain.UserRole]; nested exception is org.hibernate.exception.LockAcquisitionException:

could not insert:

数据库出现死锁!!!某个session(即数据库连接)在操作表UserRole 时,没有提交,而该连接非正常断开

(或没有 commit/rollback就断开),导致UserRole 对应的表被锁住,另外的session(即数据库连接)

试图对该UserRole 对应的表进行DML时 就会报资源正忙无法锁定的错误!
好好检查下代码!或者,看看锁住 对应的表UserRole 的到底是哪个session或哪个sql,然后相应的找原因。

删除的时候马上调用getHibernateTemplate().flush();

因为你反正同一个事务中了,删除后事务还没commit,马上做插入,自然出现重复主键问题
可以调用flush()方法马上提交

删除操作后立即调用getHibernateTemplate().flush()可以解决问题。

原则

在同个事务中,最好不要再一张表上进行增删(改),再事务的控制下,hibernate最终生成SQL时候是不知道如何来进行增删改的。

相关文章
相关标签/搜索