JPA查询中的联合 - 来自同一个表

时间:2013-06-11 17:54:31

标签: java sql jpa union-all

我有一个要求,我需要限制从特定标志的表返回的记录数和其他标志值的所有记录。

例如:contact-history表有一个名为IorM_flg的元素,可能的值为'm'和'o'。

我只需要返回10条'o'记录和'm'的所有记录。

我打算用union为这个写一个查询。像这样:

select ch from contact_history where ch.rownum <= 10 and ch.IorM_flg = 'o'
Union All
select ch from contact_history where ch.IorM_flg != 'o'

这可能吗? 请注意,它是一个JPA查询。 (contact_history是对象名称)

欢迎任何其他更好的建议!

2 个答案:

答案 0 :(得分:2)

JPA不支持UNION,但如果使用EclipseLink,则JPQL支持UNION。此外,COLUMN运算符可用于访问rownum等特殊列。

请参阅, http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.html

答案 1 :(得分:1)

不,这对JPQL来说是不可能的,因为它没有UNION(ALL)。此外,无法使用rownum限制查询字符串本身返回的行数,但这可以通过setMaxResults完成。

在许多情况下

  • 执行两个查询,
  • 使用setMaxResults和
  • 限制第一个结果的数量
  • 在Java中丢弃重复项并合并两个查询的结果

是可行的解决方案。