JPA - 在 where 子句中使用 'composite values' 进行查询

JPA - Query with 'composite values' in where-clause

我想在 JPA 2.1 中使用 Eclipselink 作为实现来实现以下(对于此示例:MySQL)语句:

select *
from account
where (mailing_zip_code, id) > (56237, 275)
order by mailing_zip_code asc, id asc 
limit 10;

我想要实现的是在查询中不使用偏移量的情况下实现无限滚动的 seek 方法。由于关注 where 子句,我无法为该构造找到正确的名称。在某些地方它被称为'composite value',但我找不到这个名字的结果,但它似乎符合SQL-92 标准。

这个语句将通过过滤器参数进行扩展,所以我自然想用 JPA 标准构建它 API。

我在 API 上搜索了一段时间,现在有人知道这是否可行吗?

意识到

之后
select *
from account
where (mailing_zip_code, id) > (56237, 275)
order by mailing_zip_code asc, id asc 
limit 10;

只是一种较短的写法

select *
from account
where mailing_zip_code > '56237'
or (mailing_zip_code = '56237' AND id > 276)
order by mailing_zip_code asc, id asc 
limit 10;

条件查询毕竟不是那么难(仅附加谓词):

if (null != startId) {
     Predicate dateGreater = cb.greaterThan(entity.get(sortBy), startValue);

     Predicate dateEqual = cb.equal(entity.get(sortBy), startValue);
     Predicate idGreater = cb.greaterThan(entity.get("id"), startId);
     Predicate dateEqualAndIdGreater = cb.and(dateEqual, idGreater);

     cb.or(dateGreater, dateEqualAndIdGreater);
}

如果有更好的方法,我很乐意学习