JPA查询返回一个元组,其中一个部分是一个实体

时间:2018-01-30 22:30:03

标签: jpa

我有两个不相关的表,我想要进行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中匹配行的时间大约是一半。

0 个答案:

没有答案