如何将JPA中的自定义函数转换为谓词?

我有一个自定义的函数实现(接口SQLFunction ),如下所示:

 public class FilterFunction implements SQLFunction { @Override public boolean hasArguments() { return true; } @Override public boolean hasParenthesesIfNoArguments() { return false; } @Override public Type getReturnType(Type firstArgumentType, Mapping mapping) throws QueryException { return StandardBasicTypes.STRING; } @Override public String render(Type firstArgumentType, List arguments, SessionFactoryImplementor factory) throws QueryException { return arguments.get(0).toString(); } } 

所以它只需要一个参数并用它替换函数。 SQL可能如下所示:

 HUGE_SQL = 'SOME_VALUE' AND HUGE_SQL2 = 'SOME_VALUE' 

所以它是某种谓词。 我正在以下列方式使用该function:

 ParameterExpression parameterExpression = criteriaBuilder.parameter(String.class); criteriaBuilder.function("filter", String.class, parameterExpression)); 

我想使用disjunction与几个这样的函数将它们的数组传递给CriteriaBuilder.or 。 该函数是一个Expression实现。 但CriteriaBuilder.or采用了一系列Predicate的。 我试图将这样的函数转换为Predicate但我在运行时得到了Predicate转换exception。

我试图在CriteriaBuilder.isTrue包装此函数。 然后我必须指定函数Boolean.class的返回类型而不是String.class但是我得到另一个运行时exception,说它不能将我的函数转换为boolean。

我必须这样做,因为我必须使用JPA Criteria API。

如何在CriteriaBuilder.or链接这些函数? 非常感谢你!