Как использовать подзапрос в HQL, используя hibernate - PullRequest
0 голосов
/ 14 мая 2018

У меня есть проект maven, использующий каркасы hibernate и jersey, я пытался создать подзапрос с помощью hql, но он не работает, Код на упаковке DAO ниже:

...
    StringBuilder str = new StringBuilder();
    str.append(" SELECT t.produtos FROM Tabela t WHERE t.id = :tabelaId ");

    if(parametro != null) { 
        str.append(" AND :parametro like (SELECT p.nome FROM Produto p) ");
    }

    try {
        if(tabelaId != null ) {

            Query query = em.createQuery(str.toString());
            query.setParameter("tabelaId", tabelaId);

            if(parametro != null) {
                query.setParameter("parametro", "%" + parametro + "%");
            }

            produtos = query.setFirstResult(offset).setMaxResults(limit).getResultList();
        }else {
            throw new DAOException("Voce deve informar a tabela!", ErrorCode.BAD_REQUEST.getCode());
        }

    }
...

Я получаю сообщение об ошибке при попытке выполнить запрос.

Сообщение об ошибке:

<AST>:0:0: unexpected AST node: query
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1386)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4316)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2134)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2062)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:813)
at

...

1 Ответ

0 голосов
/ 18 мая 2018

Это предложение:

AND :parametro like (SELECT p.nome FROM Produto p)

Не поддерживается JPQL или HQL. Подзапрос поддерживается, но проблема в :parametro like с подзапросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...