2014-11-17 4 views
3

Моя проблема заключается в том, что я не знаю, как правильно называть собственную функцию Oracle через запрос dsl.Вызов встроенной функции Oracle (wm_concat) через запрос dsl

My 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.Ille galStateException: Нет типа данных для узла: 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

следующий код работает для меня.

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().

Чтобы быть полным, я определил весь следующий импорт QueryDsl в начале моего Java-кода.

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^