0

住所のリストを含むエンティティ(Person)があります。このためのUIでは、実際には名前ごとに1つのアドレスしか入力できません。

ユーザーは個人を作成してからアドレスを追加できます。データベースには、1つの人の行と1つの住所の行があります。その後、ユーザーはUIを介してアドレスを更新できます。同じ人が使用されるように、エンティティマネージャーでmergeを呼び出しています。問題は、アドレスがマージされないが、新しい行が追加されることです。したがって、1人の行と2つの住所の行があります。2番目のアドレス行のみが有効です。

この関係の私のコードは次のとおりです。

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "person")
@OrderBy("id asc")
private List<Address> addresses;

子を強制的にマージするための注釈を追加できますか?または、これを自分で手動で行う必要がありますか?

理想的には、上記のシナリオでは、Personテーブルに1行、addressテーブルに1行あります。

ありがとう

4

1 に答える 1

2

Idが既存のオブジェクトと一致する場合、merge()は既存のオブジェクトにマージされます。アドレスのIDが同じであることを確認してください。

また、アドレスが1つしかない場合、なぜOneToManyを使用しているのか、OneToOneを使用するだけです。

于 2012-04-25T13:34:25.130 に答える