0

我有一个@ModelAttribute("myModel")注入到弹簧形式中的,并且还作为会话的一部分存储在@SessionAttribute("myModel").

在控制器处,模型被拾取并将更改合并到@SessionAttribute 中。

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("myModel") MyModel myModel) {
  myModel.getSomething();
  ...
}

问题是我所有的休眠域对象都是懒惰的。因为创建 myModel 的 Hibernate Session 不再存在,所以当我尝试访问未包含fetch在 HQL 中的语句中的某些内容时,我得到了 LazyInitializationException。

Hibernate 有一个merge()方法,我如何使用它来将在以前的休眠会话中创建的对象合并到当前会话中,以便可以访问所有 LAZY 属性?还是有另一种方法可以做到这一点?

4

1 回答 1

3

调用 merge(),并使用它的返回值:它是包含在作为参数传递的分离实体中找到的值的附加实体:

Foo modifiedAttachedFoo = session.merge(modifiedDetachedFoo);
modifiedAttachedFoo.getLazyCollection().size(); // no problem: the entity is attached
于 2013-08-21T12:02:17.303 回答