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

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

例如: 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是对象名称)

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

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

在许多情况下

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

是可行的解决方案

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

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