如何修復(fù)org.hibernate.LazyInitializationException - 無法初始化代理 - 沒有Session我得到以下異常:Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java)
at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139)
at JSON_to_XML.main(JSON_to_XML.java:84)當(dāng)我嘗試從main調(diào)用以下行時:Model subProcessModel = getModelByModelGroup(1112);System.out.println(subProcessModel.getElement().getNote());我getModelByModelGroup(int modelgroupid)首先實現(xiàn)了這個方法,如下所示:public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) {
Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession();
Transaction tx = null;
if (openTransaction) {
tx = session.getTransaction();
}
String responseMessage = "";
try {
if (openTransaction) {
tx.begin();
}
Query query = session.createQuery("from Model where modelGroup.id = :modelGroupId");
query.setParameter("modelGroupId", modelGroupId);
List<Model> modelList = (List<Model>)query.list();
Model model = null;
for (Model m : modelList) {
if (m.getModelType().getId() == 3) {
model = m;
break;
}
}
if (model == null) {
Object[] arrModels = modelList.toArray();
if (arrModels.length == 0) {
throw new Exception("Non esiste ");
}
model = (Model)arrModels[0];
}但仍然得到同樣的錯誤。我一直在閱讀這個錯誤,并找到了一些可能的解決方案。其中一個是將lazyLoad設(shè)置為false但我不允許這樣做,這就是我被建議控制會話的原因
3 回答

天涯盡頭無女友
TA貢獻(xiàn)1831條經(jīng)驗 獲得超9個贊
如果你使用Spring將類標(biāo)記為@Transactional,那么Spring將處理會話管理。
@Transactionalpublic class MyClass { ...}
通過使用@Transactional
,可以自動處理許多重要方面,例如事務(wù)傳播。在這種情況下,如果調(diào)用另一個事務(wù)方法,則該方法可以選擇加入正在進(jìn)行的事務(wù),避免“無會話”異常。
添加回答
舉報
0/150
提交
取消