Java StandardAnsiSqlAggregationFunctions上带有HQL-NPE的新对象,determineJdbcTypeCode

Java StandardAnsiSqlAggregationFunctions上带有HQL-NPE的新对象,determineJdbcTypeCode,java,sql,hibernate,hql,Java,Sql,Hibernate,Hql,我知道这一直是,但我似乎有一个不同的问题。我看到在Hibernate中有一个函数忽略了自定义用户类型,但据我所知,我没有使用自定义用户类型。我基本上是在尝试创建一个新对象,它是现有映射bean的集合,但是我收到一个针对某个Hibernate方言函数的NullPointerException。我尝试使用Double和BigDecimal作为我的值字段类型,但它们在部署时都向我提供相同的错误消息。请帮忙 下面是一些代码: 映射bean: @Entity @Table(name = "v_summar

我知道这一直是,但我似乎有一个不同的问题。我看到在Hibernate中有一个函数忽略了自定义用户类型,但据我所知,我没有使用自定义用户类型。我基本上是在尝试创建一个新对象,它是现有映射bean的集合,但是我收到一个针对某个Hibernate方言函数的NullPointerException。我尝试使用Double和BigDecimal作为我的值字段类型,但它们在部署时都向我提供相同的错误消息。请帮忙

下面是一些代码:

映射bean:

@Entity
@Table(name = "v_summary_report")
public class SummaryReportView implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id")
    private String id;

    @Column(name = "region")
    private String region;

    @Column(name = "market")
    private String market;

    @Column(name = "proj_year_month")
    private String projectionYearMonth;

    @OneToOne(cascade={CascadeType.DETACH})
    @JoinColumn(name="attrib_id", referencedColumnName="attrib_id")
    private Attribute attribute;

    @Column(name = "total_value")
    private BigDecimal value;

    /* other stuff */
}
正在调用的命名查询:

    @NamedQuery(name = "findSummaryReportTotalByRegion", query = " SELECT new com.rac.projections.bean.SummaryReportTotal(srv.projectionYearMonth, srv.attribute, sum(value)) from SummaryReportView srv where srv.region = :region group by srv.projectionYearMonth, srv.attribute"),
总bean定义:

public class SummaryReportTotal {

    private String projectionYearMonth;
    private Attribute attribute;
    private BigDecimal value;

    public SummaryReportTotal() {
        super();
    }

    public SummaryReportTotal(String projectionYearMonth, Attribute attribute, BigDecimal value) {
        this.projectionYearMonth = projectionYearMonth;
        this.attribute = attribute;
        this.value = value;
    }

    /* other stuff */
}
堆栈跟踪:

Caused by: java.lang.NullPointerException
at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.determineJdbcTypeCode(StandardAnsiSqlAggregationFunctions.java:145)
at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.getReturnType(StandardAnsiSqlAggregationFunctions.java:157)
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:406)
at org.hibernate.hql.internal.ast.tree.AggregateNode.getDataType(AggregateNode.java:83)
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructorArgumentTypes(ConstructorNode.java:166)
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:141)
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1019)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2150)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2016)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1451)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:571)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:1032)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:506)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 45 more

如果将表别名作为其他字段作为值的前缀来解决这个问题,我不会感到惊讶


有时,HQL解析器在解析步骤中将标识符解析为有效,但在执行过程中由于异常而失败。看

如果将表别名作为其他字段作为值的前缀来解决问题,我不会感到惊讶


有时,HQL解析器在解析步骤中将标识符解析为有效,但在执行过程中由于异常而失败。看

也许这不是类型问题,但在某些数据集上,您的值字段是空的/空的?您能否通过直接在数据库中检查是否存在未分配值的条目来验证这一点?这是一个好主意,@Ulf Gitschthaler,但根据数据库设计,值字段不能为null。另外,由于我在部署时收到此错误,而不是在执行时收到此错误,所以我认为在运行时之前不会收到与数据相关的错误。可能这不是类型问题,但在某些数据集上,您的值字段为空/空?您能否通过直接在数据库中检查是否存在未分配值的条目来验证这一点?这是一个好主意,@Ulf Gitschthaler,但根据数据库设计,值字段不能为null。另外,由于我在部署时收到了这个错误,而不是在执行时收到的,所以我认为在运行时之前不会收到与数据相关的错误!非常感谢。哟!我为那个该死的NPE花了很多时间:赢家,赢家,鸡肉晚餐!非常感谢。哟!我为那个该死的NPE花了很多时间:
... sum(srv.value) ...