JPA Query возвращает «Не указано значение для параметра 3», но все параметры заданы - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь создать запрос для возврата карты с некоторыми предложениями IN, которые добавляются к строке запроса, только если Set не пуст.

Это мой метод

public List<Object> findByFilter(String nome, DemandaStatus status, Set<Estado> estados, Set<Cidade> cidades, Set<Set<DemandaCategoria>> categorias, Set<Set<DemandaSubCategoria>> subCategorias) {

       String sqlString = "SELECT new map(d.nmDemanda as nmDemanda, d.dsDemanda as dsDemanda, d.vlDemanda as vlDemanda) "
            + "FROM Demanda as d ";
            sqlString = estados.isEmpty() ? sqlString : sqlString + "JOIN d.estado estados ";
            sqlString = cidades.isEmpty() ? sqlString : sqlString + "JOIN d.cidade cidades ";
            sqlString = categorias.isEmpty() ? sqlString : sqlString + "JOIN d.categorias categorias ";
            sqlString = subCategorias.isEmpty() ? sqlString : sqlString + "JOIN d.subCategorias subs ";

            sqlString = sqlString + "WHERE 1=1 ";

            sqlString = nome == null ? sqlString : sqlString + "AND d.nmDemanda = :nome ";
            sqlString = status == null ? sqlString : sqlString + "AND d.status = :status ";
            sqlString = estados.isEmpty() ? sqlString :  sqlString + "AND d.estado IN :estados ";
            sqlString = cidades.isEmpty() ? sqlString : sqlString + "AND d.cidade IN :cidades ";
            sqlString = categorias.isEmpty() ? sqlString : sqlString + "AND d.categorias IN :categorias ";
            sqlString = subCategorias.isEmpty() ? sqlString : sqlString + "AND d.subCategorias IN :subs ";

        Query query = em.createQuery(sqlString);

        query = nome == null ? query : query.setParameter("nome", nome);
        query = status == null ? query : query.setParameter("status", status);
        query = estados.isEmpty() ? query : query.setParameter("estados", estados);
        query = cidades.isEmpty() ? query : query.setParameter("cidades", cidades);
        query = categorias.isEmpty() ? query : query.setParameter("categorias", categorias);
        query = subCategorias.isEmpty() ? query : query.setParameter("subs", subCategorias);

        return query.getResultList();
    }

Как я пытаюсь без "Estados" или "Cidades", это результат sqlString

SELECT

new map(d.nmDemanda as nmDemanda, d.dsDemanda as dsDemanda, d.vlDemanda as vlDemanda)

FROM

Demanda as d JOIN d.categorias categorias JOIN d.subCategorias subs 

WHERE 1 = 1 

AND d.nmDemanda = :nome

AND d.status = :status

AND d.categorias IN :categorias

AND d.subCategorias IN :subs

И параметры запроса тоже те 4.

Это работает нормально (или кажетсяк) и создает запрос, как и предполагалось, а также параметры, но я получаю «Не указано значение для параметра 3 (или других значений здесь, когда я передаю больше наборов в параметре)».

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