【发布时间】:2013-11-22 10:15:04
【问题描述】:
我在 Hibernate/J2EE 中遇到延迟初始化问题。我有一个对象猫,其中包含一个对象项圈,其中包含一个字符串地址。领和地址处于延迟加载中。
我正在处理我的 Object Cat,它已经从我的数据库中加载(所以我的会话已关闭)。 我的猫确实包含我的项圈,但我可以访问我的地址(延迟加载异常)。
所以我的想法是重新加载 Collar 以获取地址。它的作品,我做这样的事情:
Cat cat = animals.loadCat(id);
//Here, cat contains collar, but collar doesn't contains address
Collar collar = animals.reload(collar);
//Here my collar does contain my address
collar.setAddress("new address");
如果我这样做
animals.update(cat); //(a method who call merge)
它不会更新地址,这似乎是合乎逻辑的。
如果我这样做
update(collar);
//Method update
public void update(Collar collar){
em.merge(collar);
}
它工作正常,我的项圈和猫在基础更新。
public class Cat {
@ManyToOne
private Collar collar;
...
}
public class Collar {
@OneToMany(cascade = {CascadeType.ALL})
protected String address;
...
}
public Collar reload(Collar collar){
return em.find(Collar.class, collar.getId());
}
我的问题是,如何将我的新项圈链接到我的猫,在animals.update(cat) 之后做什么?
【问题讨论】:
-
您好,请问您可以展示一下您的 update() 方法吗?
-
可能你没有设置级联选项。
-
您在加载后更新前是否进行了
cat.setCollar(collar)或collar.setCat(cat)?哪一方是拥有方?update()是做什么的? -
不,我不知道,这可能是解决方案。猫拥有项圈。所以我必须做一个 cat.setCollar(collar)。
-
是的,我想我们需要看看你的映射。注释或 XML。
标签: java hibernate lazy-loading