一尘不染

具有LEAST和GREATEST函数的JPA CriteriaQuery

hibernate

我有一个问题,我需要使用LEAST和GREATEST函数联接两个表,但要使用JPA CriteriaQuery。这是我要复制的SQL …

select * from TABLE_A a
inner join TABLE_X x on
(
  a.COL_1 = least(x.COL_Y, x.COL_Z)
  and
  a.COL_2 = greatest(x.COL_Y, x.COL_Z)
);

我看过CriteriaBuilder.least(..)great(..),但是在尝试理解如何创建Expression<T>传递给任何一个函数的过程中遇到了困难。


阅读 480

收藏
2020-06-20

共1个答案

一尘不染

事实证明,CriteriaBuilder确实支持将LEAST和GREATEST作为非聚合函数来调用,并且可以使用CriteriaBuilder.function(..)进行访问,如下所示:

Predicate greatestPred = cb.equal(pathA.get(TableA_.col2),
                    cb.function("greatest", String.class,
                            pathX.get(TableX_.colY), pathX.get(TableX_.colZ)));
2020-06-20