我需要在我的查询中加入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吗?
答案 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() + "%");