将sql translate添加到criteriaBuilder JPQL

时间:2015-01-27 20:55:04

标签: java jpa plsql jpql

我需要在我的查询中加入plsql TRANSLATE(string1, string_to_replace, replacement_string)函数。

我正在使用javax.persistence.criteria.CriteriaBuilder在我的java中构建我的查询。

我想要做的是在带有criteriaBuilder的java中进行比这更简单的查询:

select * from person t where UPPER(TRANSLATE(t.name,'áàâäÁÀÂÄéèêëÉÈÊËíìïîÍÌÏÎóòöőôÓÒÖŐÔúùûüűÚÙÛÜŰ','aaaaAAAAeeeeEEEEiiiiIIIIoooooOOOOOuuuuuUUUUU')) LIKE UPPER('%variable%')

('%variable%')是我在java中的变量。

我的问题是如何在jpql中构建类似的查询?

现在我有:

Predicate pName = criteriaBuilder.like(criteriaBuilder.upper(root.<String> get("name")), "%" + dtp.getName().trim().toUpperCase() + "%");

相当于:

select * from person t where upper(t.name) like upper('%variable%')

JPQL是否支持翻译功能? 它可行吗? 我需要一个像巫师一样的Gandalf吗?

1 个答案:

答案 0 :(得分:0)

您可以使用“函数”方法:

Expression<String> func = criteriaBuilder.function("translate", String.class, criteriaBuilder.upper(root.<String> get("name")),
                    criteriaBuilder.literal("áàâäÁÀÂÄéèêëÉÈÊËíìïîÍÌÏÎóòöőôÓÒÖŐÔúùûüűÚÙÛÜŰ"), criteriaBuilder.literal("aaaaAAAAeeeeEEEEiiiiIIIIoooooOOOOOuuuuuUUUUU"));

Predicate pName = criteriaBuilder.like(func, "%" + dtp.getName().trim().toUpperCase() + "%");