HQL createQuery генерирует исключение NullPointerException при создании нового объекта в запросе - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь создать новый объект из результирующего набора HQL-запроса, но он вызывает исключение NullPointerException в session.createQuery()

Может кто-нибудь показать мне какой-либо недостаток в запросе, который я создал?

Идея состоит в том, чтобы вернуть type/area/reason вместе с их count и затем создать новый объект CasesOverview с этими значениями.

        StringBuilder hql = new StringBuilder("SELECT NEW CasesOverviewDTO(:filterColumnString, Math.toIntExact(count(c.id)), :filter) ");
        hql.append("FROM Case AS c ");
        hql.append("where c.site.id = :siteId and c.status ");
        if(isOpen) {
            hql.append("!= :close and createdDate > :startDate and createdDate < :endDate ");
        } else {
            hql.append("= :close and closedDate > :startDate and closedDate < :endDate ");
        }
        hql.append("group by :filterColumn");

        Query query = exeQuery(hql.toString());
        switch(filter) {
            case TYPE:
                query.setParameter("filterColumnString", "c.area.toString()");
                query.setParameter("filterColumn", "c.area");
                break;
            case CASE_TYPE:
                query.setParameter("filterColumnString", "c.type.toString()");
                query.setParameter("filterColumn", "c.type");
                break;
            case RESOLUTION:
                query.setParameter("filterColumnString", "c.reason.toString()");
                query.setParameter("filterColumn", "c.reason");
                break;
        }
        query.setParameter("filter", filter);
        query.setParameter("siteId", siteId);
        query.setParameter("close", "CLOSED");
        query.setParameter("startDate", startDate);
        query.setParameter("endDate", endDate);

В методе createQuery выдается ошибка:

Caused by: java.lang.NullPointerException
at org.hibernate.hql.internal.ast.tree.ConstructorNode.formatMissingContructorExceptionMessage(ConstructorNode.java:201)
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:193)
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:158)
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1095)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2328)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2194)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1476)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:573)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
at com.essensys.bluefin.dao.hibernate.HibernateGenericDao.exeQuery(HibernateGenericDao.java:411)

1 Ответ

0 голосов
/ 11 октября 2019

По трассировке стека кажется, что нет конструктора, который бы удовлетворял вашему CasesOverviewDTO(:filterColumnString, Math.toIntExact(count(c.id)), или, если он есть, он не находится в том же пакете, что и класс, в котором создается запрос hql, и поэтому должен быть полностью квалифицирован(добавьте название пакета как new com.some.package.CasesOverviewDTO(args)). Можете ли вы также опубликовать свой CasesOverviewDTO?

...