JPQL:在查询中从多个表创建新对象

时间:2011-10-10 09:08:34

标签: java database jpa jpql

我目前正在尝试使用JQPL获取数据。我的查询看起来像

SELECT NEW com.test.CustomObject(t1.name, CASE WHEN(t2 IS NOT NULL) THEN true ELSE false END) FROM table1 t1, table2 t2 WHERE t1.id = :id1 AND t2.id = :id2

当然这两个实体本身存在一个查询,其中一个正在工作。使用固定值查询也有效:

SELECT NEW com.test.CustomObject(t1.name, false) FROM table1 t1 WHERE t1.id = :id1

我的问题是,如果:id2有一个不存在的值,我没有收到任何返回值。而不是给CustomObject构造函数赋予false,而是完全省略了行本身。

如果参数id2在table2中有一行将其作为布尔值传递给自定义构造函数,我还能做些什么来获取知识?

当然可以提供更多信息。

2 个答案:

答案 0 :(得分:2)

您必须使用LEFT(OUTER)JOIN从table1连接到table2。当连接的右侧不存在时,这将导致左侧成为结果的一部分。在这种情况下,来自右侧的值(例如t2.id)具有空值。

将id设置为参数两次也没有意义(假设你想要的是t1.id = t2.id)。只需使用join和set id参数一次。

答案 1 :(得分:0)

我可以用Exsists解决问题:

SELECT NEW com.test.CustomObject(t1.name, CASE WHEN EXISTS(SELECT t2.id FROM table2 t2 WHERE t2.id = :id2) THEN true ELSE false END) FROM table1 t1 WHERE t1.id = :id1