完全从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);
做两个简单的查询通常比做一个复杂的查询要好。