Для людей, которые все еще ищут решение.
Зная, что функция HQL str
выполняет свою работу (по крайней мере, для Hibernate v. 3.6.9.Final), можно реализовать свой собственный FunctionExpression
, например:
//plagiarized from org.hibernate.ejb.criteria.expression.function.CastFunction
public class StrFunction<Y extends Number> extends BasicFunctionExpression<String> implements FunctionExpression<String>, Serializable {
public static final String FCT_NAME = "str";
private final Selection<Y> selection;
public StrFunction(CriteriaBuilder criteriaBuilder, Selection<Y> selection) {
super((CriteriaBuilderImpl) criteriaBuilder, String.class, FCT_NAME);
this.selection = selection;
}
@Override
public void registerParameters(ParameterRegistry registry) {
Helper.possibleParameter(selection, registry);
}
@Override
public String render(CriteriaQueryCompiler.RenderingContext renderingContext) {
return FCT_NAME + '(' + ((Renderable) selection).render(renderingContext) + ')';
}
}
, а затемиспользуйте это:
cb.like(new StrFunction<Long> (cb, root.get(MyObject_.id)), "%mySearchTerm%");