我的问题是我不知道如何通过查询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:'function(wm_concat)' + - [METHOD_NAME] IdentNode:'wm_concat'{originalText = wm_concat}
我正在使用JPA 2.1和hibernate
此致
答案 0 :(得分:0)
以下代码适用于我。
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;