0

我有两个表 T1 和 T2,我想实现这样的目标:

Select * from t1 left outer join t2 on (t1.id = t2.id and t2.x = :val) where t2.x is null or t2.x = :val

我有 T1 和 T2 的实体。

在 T1 中:

 @OneToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "ID", insertable = false, updatable = false)
 protected T2 t2;

我尝试了以下 JPA 查询:

SELECT t1 FROM T1 LEFT JOIN t.t1 t2 WHERE t2.x IS NULL OR t2.x = :val

但它并没有给我我想要的。问题是当我在 T2 中有某个 ID 的匹配记录时,我只会收到一个 T2.X 值的结果。我需要所有任何值的结果,即使它为空。

生成的 SQL 类似于:

SELECT * FROM T1 t1 LEFT OUTER JOIN T2 t2 ON (t2.ID = t1.ID) WHERE ((t2.X IS NULL) OR (t2.X = ?))

为什么我需要这个?我在 T1 中有一些详细信息,相同的信息可能在 T2 中可用。T2 中的信息具有优先权。如果数据在 T2 中不可用,我只使用 T1 中的默认数据。

可能是我看错了方向。因此,欢迎任何有关解决此问题的想法。

谢谢!

4

1 回答 1

0

EclipseLink 在 2.4 中添加了 ON 子句支持,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

于 2012-06-13T14:17:50.673 回答