国产探花免费观看_亚洲丰满少妇自慰呻吟_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">

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 望都县| 高要市| 宣威市| 林西县| 临漳县| 苍南县| 云林县| 天峨县| 莆田市| 察隅县| 安龙县| 镇雄县| 香格里拉县| 尉犁县| 临夏县| 湘阴县| 临安市| 广宗县| 兖州市| 郯城县| 龙陵县| 清水河县| 五河县| 伊金霍洛旗| 日喀则市| 武川县| 论坛| 龙门县| 泰顺县| 平昌县| 黄山市| 信宜市| 许昌市| 扎鲁特旗| 涟源市| 自贡市| 湟源县| 临沂市| 开江县| 宜君县| 永德县|