栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

休眠单向关联的麻烦

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

休眠单向关联的麻烦

我相信Hibernate默认为延迟初始化。因此,当您在会话中加载Foos列表时,在尝试使用它们之前,不会加载任何与它们关联的Bar。到那时,您已经关闭了会话,从而导致错误。

一些潜在的解决方案:

  • 启用对Foo-Bar关联的热切获取
  • 在获取时“加入”(实际上是急切的获取)
  • 尝试在会话中访问Bar(这将起作用,但是您正在调用Foo.getBar()只是为了加载关联的Bar对象)

评论更新:

用于会话/事务管理的惯用语:

Session sess = factory.openSession();Transaction tx;  try {    tx = sess.beginTransaction();    //do some work    ...    tx.commit();  }  catch (Exception e) {    if (tx!=null) tx.rollback();      throw e;  }  finally {    sess.close();  }

重新附加“分离的”对象(基于参考文档):

如果对象已被修改:在新会话中更新对象

// in the first sessionCat cat = (Cat) firstSession.load(Cat.class, catId);Cat potentialMate = new Cat();firstSession.save(potentialMate);// in a higher layer of the applicationcat.setMate(potentialMate);// later, in a new sessionsecondSession.update(cat);  // update catsecondSession.update(mate); // update mate

如果对象未修改,则可以使用lock():

//just reassociate:sess.lock(fritz, LockMode.NONE);//do a version check, then reassociate:sess.lock(izi, LockMode.READ);//do a version check, using SELECT ... FOR UPDATE, then reassociate:sess.lock(pk, LockMode.UPGRADE);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号