我在Hibernate/J2EE中的Lazy Initialization有問題。我有一個Object Cat,它包含一個包含字符串地址的Object 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()方法嗎? –
可能您沒有設置Cascade選項。 – mvb13
在加載之後和更新之前,你做過'cat.setCollar(collar)'或'collar.setCat(cat)'嗎?擁有哪一方? 'update()'做了什麼? – Thomas