为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复org.hibernate.LazyInitializationException

如何修复org.hibernate.LazyInitializationException

慕村225694 2019-07-29 16:57:39
如何修复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)当我尝试从main调用以下行时:Model subProcessModel = getModelByModelGroup(1112);System.out.println(subProcessModel.getElement().getNote());我getModelByModelGroup(int modelgroupid)首先实现了这个方法,如下所示: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设置为false但我不允许这样做,这就是我被建议控制会话的原因
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

如果你使用Spring将类标记为@Transactional,那么Spring将处理会话管理。

@Transactionalpublic class MyClass {
    ...}

通过使用@Transactional,可以自动处理许多重要方面,例如事务传播。在这种情况下,如果调用另一个事务方法,则该方法可以选择加入正在进行的事务,避免“无会话”异常。


查看完整回答
反对 回复 2019-07-29
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

你可以尝试设置

<property name="hibernate.enable_lazy_load_no_trans">true</property>

在hibernate.cfg.xml或persistence.xml中

这个属性要记住的问题在这里得到了很好的解释


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1516 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号