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

首頁 > 開發 > 綜合 > 正文

解釋一個關于Hibernate lazy的問題

2024-07-21 02:14:29
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 使用hibernate時意外報錯:

    exception in thread "main" org.hibernate.lazyinitializationexception: could not initialize proxy - the owning session was closed at org.hibernate.proxy.abstractlazyinitializer.initialize(abstractlazyinitializer.java:53) at org.hibernate.proxy.abstractlazyinitializer.getimplementation(abstractlazyinitializer.java:84) at org.hibernate.proxy.cgliblazyinitializer.intercept(cgliblazyinitializer.java:134) at com.entry.database.bean.oaloginlink$enhancerbycglib$a418b18d.getname(<generated>) at test.test.main(test.java:145)

    很是讓我頭痛,上網查看相關資料發現這樣一個解決方式:

    "org.hibernate.lazyinitializationexception: could not initialize proxy"延遲抓取出的錯,hb3對many-to-one的默認處理是lazy = "proxy",沒有搞懂到底怎么回事,把所有many-to-one,one-to-one都加上lazy="false"...

    這個方法理論上沒錯,但是會讓人產生誤解,使人以為只是修改<set>中的lazy值,照做后程序依然會報錯,看看下面的文章也許就明白了(注意最后一行紅色標記)!

    lazy initialization
    集合(不包括數組)是可以延遲初始化的,意思是僅僅當應用程序需要訪問時,才載入他們的值。
    s = sessions.opensession();
    user u = (user) s.find("from user u where u.name=?", username,
    hibernate.string).get(0);
    map permissions = u.getpermissions();
    s.connection().commit();
    s.close();
    integer accesslevel = (integer) permissions.get("accounts"); //error!
    因為在commit之前,permissions沒有被用到,permission沒有被初始化,而session被close了,導致permissions永遠都無法load data.
    解決辦法:吧最后一行一道session被提交之前.
    設置:
    <set name="names" table="names" lazy="true" order-by="name asc">
    <key column="group_id"/>
    <element column="name" type="string"/>
    </set>

    ==================================

    在做spring1.2 + hibernate 3 + struts demo時候遇到一個問題,編輯用戶數據時候

    用com.jeedev.service.dao.hibernate.userhibernatedao 中 public tsysuser getuser(int userid) { } 方法,總是不能正常顯示編輯數據。具體表現為:

    參考 com.jeedev.service.dao.hibernate.userhibernatedao 第32-45行

    java代碼:


     public tsysuser getuser(int userid) {

     if (this.gethibernatetemplate() == null) {
     system.out.println("error at there");
     return null;
     }

     tsysuser edituser= (tsysuser) gethibernatetemplate().load(tsysuser.class, new integer(userid));

     system.out.println(edituser.getusername());
     system.out.println(edituser.getdeptno());

     return edituser;
     }

    如果刪除上面的
    java代碼:
     system.out.println(edituser.getusername());
     system.out.println(edituser.getdeptno());

    在點擊編號,修改時候就會出現錯誤:

    2005-10-27 15:35:59,245 error [org.hibernate.lazyinitializationexception] - could not initialize proxy - the owning session was closed
    org.hibernate.lazyinitializationexception: could not initialize proxy - the owning session was closed

    經過在javaeye論壇大家一致認為 是hibernate lazy的原因

    在web級別應用時候,會出現意想不到的lazy錯誤,解決方法就是 設置 lazy="false" 例:

    <hibernate-mapping>

     <class name="com.jeedev.hb.tsysuser" table="t_sysuser" lazy="false">

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 栾城县| 阿巴嘎旗| 汕尾市| 西贡区| 辽宁省| 郁南县| 正定县| 延安市| 武山县| 阿克陶县| 黎川县| 牙克石市| 永吉县| 达尔| 全椒县| 长子县| 蒲城县| 沁水县| 柘荣县| 石屏县| 五莲县| 盈江县| 准格尔旗| 张家口市| 潜江市| 万源市| 白沙| 绥中县| 建瓯市| 随州市| 滕州市| 福泉市| 西盟| 荥阳市| 甘孜县| 刚察县| 金昌市| 靖远县| 邵东县| 七台河市| 石柱|