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()
要求された場合)。