我有两个不相关的表,我想要进行LEFT JOIN,我只需要LEFT表中的一列,但是需要整个实体(如果它存在则我打算更新,或者如果不存在则创建),从右边开始。 / p>
表格的简化版本:
TABLE1
id, type, data
TABLE2
id, type, and, other, stuff
当前的JPQL:
SELECT T1.type,
(SELECT T2
FROM TABLE2 T2
WHERE T2.id = T1.id
AND T2.type = T1.type)
FROM T1
WHERE T1.id = :ID
我目前正在获得某种逻辑联合错误......
这可以完成,还是应该使用单独的查询?
确切的例外是:
Caused by: java.lang.ClassCastException: org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect incompatible with org.apache.openjpa.jdbc.sql.SelectImpl
我使用的Java代码如下:
Query q = this.em.createQuery(jql, Tuple.class);
q.setParameter("ID", id);
@SuppressWarnings("unchecked")
List<Tuple> result = q.getResultList();
子查询对我的解决方案不是必不可少的 - 它只是唯一可解析的形式 - 常规SQL LEFT JOIN不是。换句话说,我要做的是对于TABLE1中的给定ID,查找TABLE2中具有相同ID和类型的所有行,如果没有行,则返回null。稍后的代码将在TABLE2中创建行,其中id和type都没有。我期望TABLE1中每个ID有2-3种类型,而TABLE2中匹配行的时间大约是一半。