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