国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate開發中遇到org.hibernate.NonUniqueObjectException處理

2019-11-14 23:51:48
字體:
來源:轉載
供稿:網友
Hibernate開發中遇到org.hibernate.NonUniqueObjectException處理

今天在項目中遇到更新數據的操作,在編碼中發現并未報錯,但數據并未得到更新,于是花了大半時間找是什么問題,最后發現是try的時候直接把異常吞了(= =!!血的教訓吶)!

排查后發現拋出一個異常org.hibernate.NonUniqueObjectException,通過反復檢查和度娘的結果發現,原來是下面的代碼出錯

session session = HibernateSessionFactory.getSession();        session.getTransaction().begin();        try{            Query hql = session.createQuery("from News where idnews = :id");            hql.setParameter("id", news.getIdnews());            News n = (News) hql.list().get(0);            news.setCreatetime(n.getCreatetime());            news.setTitle(n.getTitle());            news.setIslive(n.getIslive());                        session.saveOrUpdate(news);            return true;        }        catch(Exception e){            return false;        }        finally{            session.getTransaction().commit();            HibernateSessionFactory.closeSession();        }

原來是因為在Hibernate中同一個session內,如果已經有一個對象已經是持久化狀態(load進來等),現在構造一個新的PO,和前一個持久化對象擁有相同的持久化標識(identifier),在update的時候,就會拋這個錯誤。參考http://fatkun.com/2011/04/org-hibernate-nonuniqueobjectexception.html感謝原文作者

我的解決方法,使用傳入的news對象去設置獲取的n對象值。

上面鏈接中提供了一下解決方法

1.不要重新new一個對象,使用load的對象對他進行更改值。2.如果是hibernate3以上,可以使用session.merge()方法3.把session中同標識的對象移出(session.evict(user1)),使他成為脫管的狀態,然后user2就可以update了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 乐业县| 改则县| 康马县| 烟台市| 岢岚县| 丰原市| 玉屏| 沂水县| 茶陵县| 棋牌| 枣庄市| 金溪县| 东兰县| 太保市| 积石山| 长武县| 南溪县| 伊宁县| 陇南市| 城步| 眉山市| 永康市| 建阳市| 高雄县| 阳信县| 望谟县| 山西省| 兴隆县| 宁化县| 汤原县| 尤溪县| 太湖县| 西林县| 阆中市| 平湖市| 同仁县| 手游| 隆化县| 内黄县| 共和县|