一対多によるリレーション
自分用の備忘録も兼ねて実装にあたり苦労したので投稿します。
概要
- レストラン(親)は複数のメニュー(子)を持つ関係
- Java、SpringBootにて一対多によるリレーションを関係するエンティティに記述
- 親テーブル(@OneToMany)、子テーブル(@ManyToOne)使用
親テーブル
RestaurantsEntity.java
@Entity
@Table(name="restaurants")
public class RestaurantsEntity {
//各フィールド変数記述 略……
@OneToMany(mappedBy="restaurantId")
private List<RestaurantMenuEntity> restaurantMenuEntityList;
//下記setter/getter 略……
}
@Entity
@Table(name="restaurants")
public class RestaurantsEntity {
//各フィールド変数記述 略……
@OneToMany(mappedBy="restaurantId")
private List<RestaurantMenuEntity> restaurantMenuEntityList;
//下記setter/getter 略……
}
「一対多」の一側のフィールドには、多側のエンティティのコレクションを保持させてます(private List<RestaurantMenuEntity> restaurantMenuEntityList;)。
@OneToManyアノテーションを付与し、mappedByで関連させる多側エンティティのフィールドを指定してます(mappedBy="restaurantId")。
子テーブル
RestaurantMenuEntity.java
@Table(name="restaurantMenu")
public class RestaurantMenuEntity {
//各フィールド変数記述 略……
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "restaurantId")
private RestaurantMenuEntity restaurantId;
//下記setter/getter 略……
}
@Table(name="restaurantMenu")
public class RestaurantMenuEntity {
//各フィールド変数記述 略……
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "restaurantId")
private RestaurantMenuEntity restaurantId;
//下記setter/getter 略……
}
「多対一」の多側のフィールドには、一側のエンティティを保持させてます(private RestaurantMenuEntity restaurantId;)。
@ManyToOneアノテーションを付与することで、リレーションシップを定義しています。
nameで関連テーブルを結合させるために使用するカラム名を指定してます(name = "restaurantId")。
あとがき
まだまだ全てを理解できているわけではありませんが、ひとまず実装できました。
Author And Source
この問題について(一対多によるリレーション), 我々は、より多くの情報をここで見つけました https://qiita.com/akino_13/items/4dc2521f4cbb9ea90829著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .