2 つのテーブル:
TABLE_1:
REC_ID
1
2
3
4
TABLE_2:
REC_ID REC_VAL
2 A
3 B
エンティティ クラス (基本構造):
@Entity
@Table(name="TABLE_1")
public class Entity1 {
@Id
@Column(name="REC_ID")
private String recId;
//getters and setters
}
@Entity
@Table(name="TABLE_2")
public class Entity2 {
@Id
@Column(name="REC_ID")
private String recId;
@Column(name="REC_VAL")
private String recVal;
//getters and setters
}
SQL クエリと結果:
SELECT T1.REC_ID, T2.REC_VAL FROM TABLE_1 T1 LEFT OUTER JOIN TABLE_2 T2 ON T1.REC_ID = T2.RED_ID
Result:
REC_ID REC_VAL
1 null
2 A
3 B
4 null
JPQL クエリ:
SELECT e1.recId, e2.recVal FROM Entity1 e1 LEFT JOIN e1.<an Entity2 field in Entity1*>
* 上記の構造に含まれていないことはわかっていますが、正しく行う方法を知りたいです。@ManyToOne、@OneToOne などから選択するにはどうすればよいですか。
Entity クラスと JPQL クエリを変更して、SQL クエリと同じ結果を得るにはどうすればよいですか? いろいろ試しているのですが、うまくいきません。同じ列名で 2 つのフィールドを作成したり、文字列を @JoinColumn として定義したりすることはできません。ほとんど動作しましたが、生成された SQL クエリには、存在しない TABLE_2 の REC_ID_REC_ID 列への参照が含まれています。そして、グーグルで調べた後、これに関する適切なガイドを見つけることができません( JPQLがインライン結合条件をサポートしていないことを無視して! )