私はマージにいくつか問題があります。私の更新方法は、このように動作します:[Hibernate]トランジエントオブジェクトを子オブジェクトとマージする
void update(Parent parent) {
evict(parent);
merge(parent);
}
私のクラス:
Parent {
Long id;
List<Children> childrens;
@OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY)
@JoinColumn(name="PARENT")
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
List<Children> getChildrens(){...}
@Id
Long getId() {...}
}
Children{
Parent parent;
@ManyToOne(targetEntity = ParentImpl.class, fetch = FetchType.LAZY)
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "PARENT", nullable = false)
Parent getParent(){...}
}
私は新しい親(トランジェント)オブジェクトを作成し、新しい子供を追加して更新しようとは(&マージを立ち退かせる)、その後ショーをログに記録します私はこれをフラッシュ休止セッションの後に:
INSERT PARENT //everythings here is ok.
INSERT CHILDREN // but without parent id(id=null)
順序は良いですが、子供は挿入に親のIDを持っていません。 Parentがデータベースに永続化されている場合、すべて正常に動作し、子どもは常に良いIDを持ちます。
私は一時オブジェクトからIDを取得するにはどうすればよいですか(永続化からOKです)。
よろしくお願いいたします。 KZ。
session.saveOrUpdate()で一時的なインスタンスを保存して、IDがエンティティにアタッチされるようにしましたか?子オブジェクトの挿入が実行されたときにエンティティにIDがあることをデバッガでチェックしましたか? – fasseg