亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

休眠:LazyInitializationException:無法初始化代理

休眠:LazyInitializationException:無法初始化代理

這是讓我困惑的一個。我正在嘗試實現基本的Hibernate DAO結構,但是遇到了問題。這是基本代碼:int startingCount = sfdao.count();sfdao.create( sf );SecurityFiling sf2 = sfdao.read( sf.getId() );sfdao.delete( sf );int endingCount = sfdao.count();assertTrue( startingCount == endingCount );assertTrue( sf.getId().longValue() == sf2.getId().longValue() );assertTrue( sf.getSfSubmissionType().equals( sf2.getSfSubmissionType() ) );assertTrue( sf.getSfTransactionNumber().equals( sf2.getSfTransactionNumber() ) );它在嘗試將sf中的值與sf2中的對應值進行比較的第三個assertTrue上失敗。這是例外:org.hibernate.LazyInitializationException: could not initialize proxy - no Session    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)    at com.freightgate.domain.SecurityFiling_$$_javassist_7.getSfSubmissionType(SecurityFiling_$$_javassist_7.java)    at com.freightgate.dao.SecurityFilingTest.test(SecurityFilingTest.java:73)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

問題是您試圖訪問分離對象中的集合。您需要在訪問當前會話的集合之前重新附加對象。您可以通過


session.update(object);

使用lazy=false不是一個好的解決方案,因為您將放棄休眠的惰性初始化功能。如果為lazy=false,則在請求對象的同時將集合加載到內存中。這意味著,如果我們有一個包含1000個項目的集合,則無論我們是否要訪問它們,它們都將被加載到內存中。這不好。


請閱讀本文,其中解釋了問題,可能的解決方案以及為什么以這種方式實現。



查看完整回答
反對 回復 2019-10-28
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

這通常意味著擁有的Hibernate會話已經關閉。您可以執行以下任一操作來修復它:


使用哪個對象創建此問題,請使用 HibernateTemplate.initialize(object name)

使用lazy=false您的HBM文件。


查看完整回答
反對 回復 2019-10-28
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

如果您將休眠與JPA注釋一起使用,則這將很有用。在您的服務類中,應該使用@PersistenceContext為實體管理器設置一個設置器。將其更改為@PersistenceContext(type = PersistenceContextType.EXTENDED)。然后,您可以在任何地方訪問惰性屬性。


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關注
  • 670 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號