嘗試解決JPA懶載入異常問題(wildfly)

2021-07-12 01:09:50 字數 1402 閱讀 9848

之前在jpa/hibernate+jsf+cdi的專案中老是遇到懶載入異常問題,解決辦法要不就是修改查詢語句,要不就是改為eager。

先看一下org.hibernate.collection.internal.abstractpersistentcollection的**,丟擲懶載入異常的原因在這裡:

if ( session == null ) 

else

} else if ( !session.isopen() )

else

} else if ( !session.isconnected() )

else

}

所以,只需要在集合**物件初始化之前,將session物件傳遞給集合**物件即可,所以,寫乙個jpa***,使用@postload註解攔截方法

public class lazyinitilazecollectionlistener else

set.add(field);

}}else if(field.isannotationpresent(manytomany.class))

set.add(field);}}

}synchronized (proxy_map)

} //若是o中有需要**的物件,此時set已經不為空了

if(set == null)

for(field field : set),new handler(fieldvalue));

field.set(o, obj);}}

} catch (illegalargumentexception e) catch (illegalacces***ception e) }}

/*** 到伺服器上查詢entitymanager物件,需要在persistence.xml檔案中先配置

* *

*

*

* @return

* @throws namingexception

*/private static entitymanager lookupentitymanager() throws namingexception

class handler implements invocationhandler

@override

public object invoke(object proxy, method method, object args) throws throwable catch (exception e)

}return method.invoke(obj, args);

} }}

我自己測試的時候是通過的,環境是wildfly 10,伺服器自帶的hibernate實現。

JPA懶載入失敗問題解決

在使用jpa或者hibernate的時候,我們經常用懶載入來提高訪問效率,例如 class aa物件中懶載入b物件。典型的使用場景 a a repository.finda setobjbs a.getobjbs 此時可能出現以下錯誤 org.hibernate.lazyinitialization...

解決EJB懶載入問題

對於ejb懶載入時,由於沒有hibernate中的opensessionview,那麼需要在會話結束之前就載入資料,可以選擇在dao層實現,如下 public tbldeliverywarrant find1 string id throws serviceexception deliverywar...

JPA中延遲載入異常的解決辦法

在使用jpa時,當表與表之間有關聯關係的時候,我們在設計表的關聯關係,使用註解設定的時候,如果在註解上新增了乙個 fetch fetchtype.lazy 屬性,就是設定為乙個懶載入的模式,即什麼時候需要使用這個資料,什麼時候在在去查詢,這個有時候就會出現問題 下面以employee員工和dept部...