4

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

例如: table 有一个名为“m”和“o”contact-history的元素。IorM_flg

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

我正要为此写一个与联合的查询。像这样的东西:

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

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

4

2 回答 2

2

JPA does not support UNION, but if you use EclipseLink, UNION is supported in JPQL. Also the COLUMN operator can be used to access special columns like rownum.

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

于 2013-06-12T14:00:09.257 回答
1

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

在很多情况下

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

是可行的解决方案。

于 2013-06-11T20:02:14.087 回答