次のようなエンティティがあります。
public User {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", insertable = true, updatable = true)
@ElementDependent
private List<Item_x> item_x_list = new ArrayList<Item_x>();
}
public Item_x {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", insertable = true, updatable = true)
@Element(name = "user_id", required = false)
private Users user;
}
User.item_x_list にアイテムを追加/削除してから、em.merge(User.INSTANCE) を使用して User エンティティを永続化すると、Item_x.user プロパティが NULL になります。
JOIN FETCH クエリを使用して Item_x.user プロパティをロードし、属性がロードされていることを確認しています (必要な場合)。ただし、ユーザーエンティティでマージを実行した場合、FETCH JOIN を使用しても Item_x.user プロパティは NULL になります。
Item_x.INSTANCE をリフレッシュして回避しようとしましたが、呼び出すと:
em.refresh(Item_x.Instance);
=> ユーザーが null です。
データベースを見ると、もちろん、ユーザーが Item_x で null ではないことがわかります。
OpenJPA に Item_x でユーザーを正しくロードさせるにはどうすればよいですか? OpenJPA が Item_x.user プロパティを正しく入力しない/JOIN FETCH ステートメントを無視するのはなぜですか?