我有一个问题,我需要使用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(..)greatest(..),但是在尝试理解如何创建Expression<T>传递给任何一个函数方面遇到了困难。

最佳答案

事实证明,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)));

09-30 09:45