gpt4 book ai didi

querydsl - 通过查询dsl调用Oracle的native函数(wm_concat)

转载 作者:行者123 更新时间:2023-11-30 23:56:27 25 4
gpt4 key购买 nike

我的问题是我不知道如何通过查询dsl正确调用Oracle的原生函数。

我的sql查询是

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)

我得到以下异常

java.lang.IllegalStateException:节点没有数据类型:org.hibernate.hql.internal.ast.tree.MethodNode -[METHOD_CALL] MethodNode: '函数 (wm_concat)' +-[METHOD_NAME] IdentNode: 'wm_concat' {originalText=wm_concat}

我正在使用 JPA 2.1 和休眠

问候

最佳答案

以下代码适合我。

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。

我唯一做的就是替换 StringTemplate.create() 函数通过 Expressions.stringTemplate() 函数。

为了完整起见,我在我的 Java 代码开头定义了所有以下 QueryDsl 导入。

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;

关于querydsl - 通过查询dsl调用Oracle的native函数(wm_concat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26969781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com