【发布时间】:2015-01-27 20:55:04
【问题描述】:
我需要将 plsql TRANSLATE(string1, string_to_replace, replacement_string) 函数合并到我的查询中。
我正在使用 javax.persistence.criteria.CriteriaBuilder 在我的 java 中构建我的查询。
我想做的是在java中使用criteriaBuilder做一个类似的查询:
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 支持翻译功能吗? 可行吗? 我需要像甘道夫这样的巫师吗?
【问题讨论】:
-
JPA 2.1 具有“FUNCTION”,您可以在其中执行 RDBMS 特定的功能(例如 TRANSLATE)。
-
很遗憾,我使用的是 JPA 2.0,但没有看到“FUNCTION”。
-
正如我所说,您需要 JPA 2.1 才能“查看功能”,如果不能,则必须使用“NativeQuery”并失去数据存储独立性
-
是的,你是对的,但相反,我在我的表中添加了一个虚拟列,它允许我执行翻译功能。谢谢你的信息。