两张表:
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 等中进行选择。
如何修改实体类和 JPQL 查询以实现与 SQL 查询相同的结果?我一直在尝试各种东西,没有任何效果。它不允许我创建具有相同列名的两个字段,或者将字符串定义为@JoinColumn。我几乎让它工作了,但是生成的 SQL 查询包含对 TABLE_2 中不存在的 REC_ID_REC_ID 列的引用。在谷歌搜索这么多之后,我找不到合适的指南(忽略 JPQL 不支持内联连接条件!)