当前位置: 首页 > 知识库问答 >
问题:

通过查询dsl调用Oracle的本机函数(wm_concat)

吴刚毅
2023-03-14
select  wm_concat(COU_NAME) 
from COUNTRIES
where COU_COUNTRY_ID_PK in (1,2)

我的查询dsl版本是

JPAQuery query = new JPAQuery(entityManager); 
List<String> test = query.from(qCountr3).where(qCountr3.id.in(1L,2L)).list(StringTemplate.create("function('wm_concat',{0})",qCountr3.name));

生成的jqpl为:

select function('wm_concat',qCountry3.name)
from Country qCountry3
where qCountry3.id in (?1)

我得到以下异常

问候

共有1个答案

曹子平
2023-03-14

下面的代码适用于我。

List<String> list 
  = query
    .from(qCountr3)
    .where(qCountr3.id.in(1L,2L))
    .list(Expressions
             .stringTemplate
                ("function('WM_CONCAT',{0})"
                ,qCountr3.name
                )
         );

我使用QueryDsl版本3.7.2。

我所做的唯一一件事就是用expressions.stringtemplate()函数替换stringtemplate.create()函数。

import com.mysema.query.jpa.impl.JPAQuery;
import com.mysema.query.jpa.sql.JPASQLQuery;
import com.mysema.query.sql.OracleTemplates;
import com.mysema.query.sql.SQLTemplates;
import com.mysema.query.support.Expressions;
import com.mysema.query.types.expr.BooleanExpression;
import com.mysema.query.types.path.StringPath;
 类似资料:
  • 我试图将下面的PostgreSQL查询转换为本机查询,但遇到错误。 Postgres查询: 本机查询: 但我得到了以下错误: 无法提取结果集;SQL [n/a];嵌套异常是 org.hibernate.exception.SQLGrammarException: 无法提取 ResultSet

  • 如果反射值对象(reflect.Value)中值的类型为函数时,可以通过 reflect.Value 调用该函数。使用反射调用函数时,需要将参数使用反射值对象的切片 []reflect.Value 构造后传入 Call() 方法中,调用完成时,函数的返回值通过 []reflect.Value 返回。 下面的代码声明一个加法函数,传入两个整型值,返回两个整型值的和。将函数保存到反射值对象(refle

  • 我使用JPA本机查询和PostgreSQL DB调用存储过程。 @仓库: 因为一些参数是(外键)。 服务: 我得到了这个错误: 过程proc(bigint,bytea,字符变化,bytea,bytea)不存在 提示:没有过程匹配给定的名称和参数类型。可能需要添加显式类型转换。 如何传递值,而不是?

  • 问题内容: 我有以下查询,其结果对我来说是非常意外的: 它为所有行返回100。应该不同吗? 问题答案: 等于您的情况。 尝试这样的事情: update :甚至用ratio_to_report更简单

  • 我阅读了一些关于查询上下文和过滤上下文的文章和文档,了解到如果你不需要进行全文搜索或评分,最好使用过滤上下文。就我而言,我想返回包含ID的日志……所以我意识到我应该只使用过滤上下文而不是查询上下文。除了全文搜索或评分之外,是否有一条硬基线来定义何时应该使用其中一个? 所以我从我最初的DSL查询搜索cmd: 到过滤器上下文: 因为,我想使用NEST来执行我采用这种方法的查询搜索。 这是使用NEST进

  • 我使用了一个Oracle程序,并对其进行批处理。 现在这个过程被转换成一个函数。因此批处理不再起作用,忽略返回值也不起作用。如果我不设置 "? =" 函数就找不到了。 但如果不进行批处理,运行所有调用所需的时间太长。我必须做很多。 那么,有没有一种方法可以在不触及函数的情况下忽略JDBC级别的返回值?我想要回我的配料。