1対多については、単方向・双方向・JoinTableの3つの方式がある。
□単方向
OrdersオブジェクトからProductオブジェクトに対してのみアクセスする状態
public class Orders implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer ordersId;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "orders_id")
private Set<Product> products = new HashSet<>();
}
□双方向
双方向関連は、@OneToManyと@ManyToOneの両方のアノテーションが併用されている状態
public class Orders implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "orders")
private List<Product> products = new ArrayList<>();
}
public class Product implements Serializable {
@ManyToOne(optional = false)
private Orders orders;
}
この表記では、mappedByというパラメータを持つOrdersが被所有者側となる。
□1対多の双方向関連:JoinTable
1対多の双方向関連で間に結合テーブルを挟む場合は@JoinTableを使う
public class Orders implements Serializable {
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "orders_product")
private List<Product> products = new ArrayList<>();
}
orders_productという結合テーブルが生成される。