次のテーブルがあります。
ヘッダ
---------------------------------
ID | STATUS
---------------------------------
1 | A
---------------------------------
2 | B
---------------------------------
データ
--------------------------------------------------
ID | HEADER_ID | DKEY | DVALUE
--------------------------------------------------
1 | 1 | Age | 90
--------------------------------------------------
2 | 1 | Gender | M
--------------------------------------------------
3 | 1 | Score | 1000
--------------------------------------------------
1 | 2 | Age | 8
--------------------------------------------------
2 | 2 | Gender | M
--------------------------------------------------
3 | 2 | Score | 0
--------------------------------------------------
私のJPAクラスは次のとおりです。
**@Entity
@Table (name="HEADER")
public class Header {
@Id
@GeneratedValue
private int id;
@Column (name="STATUS")
private String status;
@OneToMany (cascade=CascadeType.ALL, orphanRemoval=true, mappedBy="header")
@LazyCollection(LazyCollectionOption.FALSE)
private Set<Data> dataList;
--- getters and Setters ---
}
@Entity
@Table (name="DATA")
publi class Data {
@Id
@GeneratedValue
private int id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "HEADER_ID", nullable = false)
private Header header;
@Column (name="DKEY")
private String key;
@Column (name="DVALUE")
private String value;
}**
さて、私の問題は、休止状態を使用して、「年齢」が「90」に等しく、「性別」が「M」に等しいデータを持つヘッダーを選択したいということです。私は以下のアプローチを試しました:
ヘッダー h から個別の h を選択 左結合 h.dataList dl where (dl.key = 'Age' and dl.value = '90') and (dl.key = 'Gender' and dl.value = 'M')
条件 "(dl.key = 'Age' and dl.value = '90') and (dl.key = 'Gender' and dl.value = 'M')" が 1 つの "DATA " 常に false になるレコード。
または、「(dl.key = 'Age' and dl.value = '90') or (dl.key = 'Gender' and dl.value = 'M')」を入力した場合、結果は間違っています。データが Age および Gender 条件を満たすヘッダーを取得します。
この問題のために何時間も頭が痛くなり、もう試す解決策がありません。誰かが正しい方向/解決策を教えてくれることを願っています。
ありがとうございます。