私は3つのエンティティ、セッション、オーダー、ユーザー(私のオンライン映画チケットプロジェクトの一部)を持っています。私のドメインモデルでは、OrderはUserとSessionの両方のfkを保持します。あなたは私のコードで見ることができるように:Jpa複数の@ManyToOneとカスケード
@Table(name="Orders")
@Entity
public class Order {
@ManyToOne
@JoinColumn(nullable = false)
private User user;
@ManyToOne
private Session session;
...
}
@Entity
@Table(name="Session")
public class Session {
@OneToMany(fetch=FetchType.LAZY,
cascade = CascadeType.ALL,
mappedBy = "session")
private List<Order> orders = new ArrayList<Order>();
...
}
@Table(name="User")
@Entity
public class User {
@OneToMany(cascade = { CascadeType.PERSIST,
CascadeType.MERGE,
CascadeType.REMOVE },
mappedBy = "user")
private @Getter Set<Order> orders = new HashSet<>();
...
}
私の質問があり、私はセッションとユーザーの両方にCascadeType.ALL
は使用できますか? セッションとユーザーの両方で注文を更新すると、競合する可能性がありますか?
ご覧のとおり、fetchType.Lazyを使用して、セッションとユーザーの両方の注文が最新であることを保証できますか?
ありがとう、ちょうど私が探しているもの! – ivy
「セッションsから別名を選択してs.ordersをフェッチする」が、このクエリはs.ordersが空の場合はnullを返します。空のオーダーのセッションが既にデータベースにある場合、どのようにオーダーを挿入できますか? – ivy
@Ivy、アップデートをご覧ください。 –