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 не должен заботиться о том, чтобы сохранить мою новую сущность для меня?
EDIT: дополнительная информация. Я использую 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
}
Метод mergeState() в моей DAO вызывает entityManager.merge(cat)
(и entityManager.flush()
если требуется).
Я редактировать мой вопрос включить отображения. Я предполагаю слияния с каскадом – carbontax
Но у меня есть cascade = MERGE на сопоставлении, и мой вызов mergeState вызывает call merge(). Я добавил дополнительную информацию выше. Что-то не хватает? – carbontax