1

I have written two hibernate queries:

  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);

Now, how do I merge these two queries? My return type has to be TypedQuery

4

2 回答 2

0

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

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

例如,而不是非工作

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,你会遇到后者的性能问题。有时在两个查询上做一个穷人的连接会更容易:

// use set for uniqueness
Set<Person> people = new HashSet<Person>((List<Person>) query1.list());
people.addAll((List<Person>) query2.list());
return new ArrayList<Person>(people);

做两个简单的查询通常比做一个复杂的查询要好。

于 2013-07-30T20:33:32.933 回答
0

UNION 语句不适用于 Hibernate。

这样你就可以:

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

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

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

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

于 2013-07-30T21:25:10.293 回答