在項目中遇到這個 HibernateException: Illegal attempt to associate a collection with two open sessions. 一查代碼發現是由於在service中存在兩個不一樣的hibernate session都同時引用了同一個collection對象,一個是load(),一個是saveOrUpdate().因爲項目是之前的項目,因此代碼很不規範,也很「龐大」(一個方法超過1000行),不想太傷筋動骨的修改。session
因而找到了一個簡單的修改方法: hibernate session 的 merge() 方法。hibernate3.0以上能夠使用merge()來合併兩個session中的同一對。hibernate
將原來的代碼:code
hbSession.saveOrUpdate(closureTask);改做:
hbSession.saveOrUpdate(hbSession.merge(closureTask));搞定!!