gpt4 book ai didi

java - 在查询中创建新对象时,HQL createQuery 抛出 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 23:18:25 27 4
gpt4 key购买 nike

我试图从 HQL 查询的结果集中创建新对象,但它在 session.createQuery() 处抛出 NullPointerException

有人可以向我展示我创建的查询中的任何缺陷吗?

这个想法是返回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)

最佳答案

从堆栈跟踪来看,似乎没有构造函数可以满足您的 CasesOverviewDTO(:filterColumnString, Math.toIntExact(count(c.id)),或者即使有,它也不在与创建 hql 查询的类相同的包,因此需要完全限定(添加包名称,如 new com.some.package.CasesOverviewDTO(args))。您也可以吗发布您的 CasesOverviewDTO

关于java - 在查询中创建新对象时,HQL createQuery 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58340240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com