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という結合テーブルが生成される。