Collar collar = cat.getCollar();
if(collar==null) {
collar = new Collar(cat);
}
collar.setStuds(true);
catDAO.mergeState(cat);
这抱怨collar 是一个瞬态对象,必须在刷新事务之前保存它。
我可以通过这样做来解决这个问题:
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()
如果需要)。