1. 程式人生 > >hibernate呼叫delete方法時迴圈刪除的解決

hibernate呼叫delete方法時迴圈刪除的解決

在開發SSH專案時,原本很正常的刪除是可以的,但後來莫名其妙發現它迴圈刪除,然後導致以下錯誤:

“java.lang.IllegalArgumentException: attempt to create delete event with null entity”

java.lang.IllegalArgumentException: attempt to create delete event with null entity
	org.hibernate.event.DeleteEvent.<init>(DeleteEvent.java:47)
	org.hibernate.impl.SessionImpl.delete(SessionImpl.java:772)
	org.springframework.orm.hibernate3.HibernateTemplate$25.doInHibernate(HibernateTemplate.java:843)
	org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
	org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:837)
	org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:833)
	com.dao.base.GenericDaoImpl.delete(GenericDaoImpl.java:62)

發現刪除一次之後,它又刪除一次,資料庫記錄是已經不見了的,百度了很久沒能解決,可能百度的方向不對吧。

最後發現某個帖子說刪除前判斷一下,於是我從action開始試到dao層才成功。我猜測是因為刪除的物件快取沒有清理掉,所以在action這些高一點的層次沒法判斷,只能在最最底層呼叫getHibernateTemplate().delete(entity)方法時判斷實體是否為空。

public void delete(T entity) {
	if (entity != null) {
		getHibernateTemplate().delete(entity);
	}
		
}