【问题标题】:Add sql translate to a criteriaBuilder JPQL将 sql translate 添加到条件构建器 JPQL
【发布时间】: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”并失去数据存储独立性
  • 是的,你是对的,但相反,我在我的表中添加了一个虚拟列,它允许我执行翻译功能。谢谢你的信息。

标签: java jpa plsql jpql


【解决方案1】:

你可以使用方法“function”:

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() + "%");

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 2019-08-14
    • 2022-01-01
    • 2012-10-25
    • 2019-02-12
    • 1970-01-01
    • 2021-10-09
    • 2011-01-22
    相关资源
    最近更新 更多