HQL合并两个类型查询

时间:2013-07-30 19:26:53

标签: java spring hibernate hql

我写了两个hibernate查询:

  1. TypedQuery q = em.createQuery(“SELECT user.id FROM TableOne AS user WHERE ...”,Long.class);
  2. TypedQuery q = em.createQuery(“SELECT link.user_id FROM TableTwo AS link WHERE ...”,Long.class);
  3. 现在,如何合并这两个查询?我的返回类型必须是TypedQuery

2 个答案:

答案 0 :(得分:0)

完全复制https://stackoverflow.com/a/3940445/929701的答案:

你可以使用id in(select from from ...)或id in(select id from ...)

e.g。而不是不工作

from Person p where p.name="Joe"
union
from Person p join p.children c where c.name="Joe"

你可以做到

from Person p 
  where p.id in (select p1.id from Person p1 where p1.name="Joe") 
    or p.id in (select p2.id from Person p2 join p2.children c where c.name="Joe");

至少使用MySQL,你会遇到性能问题。有时候让一个穷人加入两个问题更容易:

//使用set来表示唯一性 设置people = new HashSet((List)query1.list()); people.addAll((List)query2.list()); 返回new ArrayList(people); 通常两个简单的查询比一个复杂的查询更好。

答案 1 :(得分:0)

UNION语句不适用于Hibernate。

所以你可以:

执行第一个查询并输入一个列表;

执行第二个查询并输入一个列表;

将第一个和第二个列表的结果放在一个唯一的列表中。

如果要删除重复的值,则必须以编程方式执行。