我有一个问题,我需要使用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>传递给任何一个函数的过程中遇到了困难。
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)));