Collar collar = cat.getCollar();
if(collar==null) {
collar = new Collar(cat);
}
collar.setStuds(true);
catDAO.mergeState(cat);
這表示領圈是暫時的對象,並且在事務可以刷新之前必須保存領圈。在更新父對象時可以休眠保存新實體
我可以通過做解決這個問題:
if(collar==null) {
collar = new Collar(cat);
catDao.makePersistent();
}
這是正確的嗎? Hibernate不應該照顧爲我保留我的新實體嗎?
編輯:增加更多的細節。我使用Spring MVC的版本3.0.5和Hibernate 3
class Cat {
...
@OneToOne(mappedBy="cat")
public Collar getCollar() {
return collar;
}
// etc
}
class Collar {
@OneToOne(optional = false, cascade = { CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JoinColumn(name="CAT_ID", nullable = false)
public Cat getCat() {
return cat;
}
// etc
}
在我的DAO的mergeState()方法調用entityManager.merge(cat)
(和entityManager.flush()
如果要求)。
我會編輯我的問題,包括映射。我打算合併級聯 – carbontax 2013-03-02 20:58:13
但是我確實在映射上有cascade = MERGE,我的mergeState調用確實調用merge()。我在上面添加了更多信息。有什麼遺漏嗎? – carbontax 2013-03-03 03:34:02