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