例えば以下のような関連テーブルがあるとする。
roomテーブル

equipmentテーブル

この2つのテーブルは1対多の関係にあるとする。
(roomのidと、equipmentのroom_idが紐づくとします)
※DB的には特に外部キーの設定はありません。
各テーブルのEntityを以下の通り定義する。
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.OneToMany;
/**
* The persistent class for the room database table.
*
*/
@Entity
@NamedQuery(name="Room.findAll", query="SELECT r FROM Room r")
public class Room implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int id;
private String als;
@Column(name="room_name")
private String roomName;
private String unqals;
@OneToMany(fetch = FetchType.EAGER, cascade= CascadeType.ALL)
@JoinColumn(name = "room_id")
private List<Equipment> equipments = new ArrayList<>();
//以下省略
}
package com.example.demo.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.annotations.NamedQuery;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
/**
* The persistent class for the equipment database table.
*
*/
@Entity
@NamedQuery(name="Equipment.findAll", query="SELECT e FROM Equipment e")
public class Equipment implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int id;
@Column(name="equipment_name")
private String equipmentName;
@Column(name="room_id")
private int roomId;
@OneToMany(mappedBy = "equipment")
private List<Test> tests = new ArrayList<>();
public Equipment() {
}
// 以下省略
}
親テーブル的には、@JoinColumnでnameプロパティに子テーブルの紐づけたいカラム名を指定する。(Roomテーブルの主キーと、Equipmentテーブルのroom_idが紐づくことになる)
@OneToMany(fetch = FetchType.EAGER, cascade= CascadeType.ALL)
@JoinColumn(name = "room_id")
private List<Equipment> equipments = new ArrayList<>();
実行時のSQL結果ログをを見ると以下の通り
2024-01-21T19:41:30.733+09:00 DEBUG 9748 --- [nio-8080-exec-6] org.hibernate.SQL :
select
r1_0.id,
r1_0.als,
r1_0.room_name,
r1_0.unqals
from
room r1_0
where
r1_0.id=?
2024-01-21T19:41:30.734+09:00 TRACE 9748 --- [nio-8080-exec-6] org.hibernate.orm.jdbc.bind : binding parameter (1:INTEGER) <- [1]
2024-01-21T19:41:30.736+09:00 DEBUG 9748 --- [nio-8080-exec-6] org.hibernate.SQL :
select
e1_0.room_id,
e1_0.id,
e1_0.equipment_name
from
equipment e1_0
where
e1_0.room_id=?
2024-01-21T19:41:30.736+09:00 TRACE 9748 --- [nio-8080-exec-6] org.hibernate.orm.jdbc.bind : binding parameter (1:INTEGER) <- [1]
JPA LED テールランプ Type3 シーケンシャルウインカー テールライト 互換車種:Ninja ZX-25R ZX25R ZX-4R ZX4R ZX-6R ZX6R ZX-10R ZX10R
¥10,500 (2025年9月17日 20:52 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【モデル詳細】エレガントなType-3・・・レンズカラー:ダークスモーク、発光バーカラー:センターレッド、左右クリア 【主な適合車種】ZX-10R (2016-)、ZX-6R (2019-)、ZX-4R (2023-)、ZX-25R (2020-)、Ninja400 (2018-)、Ninja250 (2018-)、Z1000 (2014-)、Z400 (2019-)、Z250 (2019-)、他 【商品の詳細】 オープニングモーション:キーONでテールランプ演出後、通常点灯になります。シーケン... もっと読む
[テスラ] コンプレッションウェア メンズ vネック [UVカット・吸汗速乾] コンプレッションシャツ スポーツインナー ランニング トレーニング フィットネス スポーツ Tシャツ ベースレイヤー アンダー 加圧シャツ MUV01-JPA_3XL
¥1,980 (2025年9月17日 20:52 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)機能性のコンプレッションvネック長袖スポーツtシャツ ストレッチ性に優れ、どんな動きにも最適なフィット感 吸汗速乾のナノドライ繊維、激しい運動の後もさらっとした着心地。 テスラのブランドロゴが”TSLA”へ変更されました。予めご了承くださいませ。 出品者の商品をもっと見る:https://www.amazon.co.jp/s?i=merchant-items&me=A11PVUG4KEPUE4
サーモス 水筒 調乳用ステンレスボトル 350ml ミッフィー グレー JPA-350B GY
11% オフ調乳用ステンレスボトルが洗いやすく、持ち運びやすくリニューアル 本体サイズ(約):幅6.5×奥行き7.5×高さ18cm、本体重量(約):200g、容量:350ml 保温効力:64℃以上(6時間)71℃以上(4時間)/保冷効力:11℃以下(6時間) 生産国:中国 素材・材質:内びん:ステンレス鋼 / 胴部:ステンレス鋼(アクリル樹脂塗装)/ フタ・せん本体・注ぎ口(飲み口):ポリプロピレン / フタパッキン・せんパッキン:シリコーンゴム