java - 为什么 Hibernate/JPA 在查询中报告空指针异常?

标签 java hibernate jpa

我正在使用 Hibernate 的 JPA 和 Java 8 来执行一个简单的查询,并将结果存储在类实例列表中。但是,当我执行代码时,Java 在 .createQuery 行上给出了空指针异常。

我检查了传递给该方法的变量,它们都包含有效的非空数据。当我在数据库上手动运行查询时检索到的行在任何收到的列中都没有显示空条目。查询中的所有列都是 GradeSummary 类和 Board 类的成员。

我迷茫了。为什么这个查询不起作用?

public List<GradeSummary> getGradeSummaryList(VdtsSysDB vdtsSysDB, BoardLoad boardLoad) {
    List<GradeSummary> gradeSummaries = vdtsSysDB
            .getEntityManager()
            .createQuery(
            "select new ca.vdts.grading.model.GradeSummary(grade, " +
            "count(*), " +
            "sum(footBoardMeasure)) " +
            "from Board " +
            "where boardLoad = :load " +
            "group by grade", GradeSummary.class)
            .setParameter("load", boardLoad)
            .getResultList();
    gradeSummaries.sort(Comparator.comparing(gradeSummary -> gradeSummary.getGrade().getName()));
    return gradeSummaries;
}

异常(exception)情况是:

18-08-18 13:28:50.701 ERROR java.lang.Throwable - Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
18-08-18 13:28:50.702 ERROR java.lang.Throwable -   at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.determineJdbcTypeCode(StandardAnsiSqlAggregationFunctions.java:200)
18-08-18 13:28:50.702 ERROR java.lang.Throwable -   at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$SumFunction.getReturnType(StandardAnsiSqlAggregationFunctions.java:158)
18-08-18 13:28:50.702 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:414)
18-08-18 13:28:50.703 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.tree.AggregateNode.getDataType(AggregateNode.java:68)
18-08-18 13:28:50.703 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructorArgumentTypes(ConstructorNode.java:158)
18-08-18 13:28:50.703 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:133)
18-08-18 13:28:50.703 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1190)
18-08-18 13:28:50.704 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2366)
18-08-18 13:28:50.704 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2232)
18-08-18 13:28:50.704 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1503)
18-08-18 13:28:50.704 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:585)
18-08-18 13:28:50.704 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:313)
18-08-18 13:28:50.705 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:261)
18-08-18 13:28:50.705 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:266)
18-08-18 13:28:50.705 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189)
18-08-18 13:28:50.705 ERROR java.lang.Throwable -   at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
18-08-18 13:28:50.706 ERROR java.lang.Throwable -   at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
18-08-18 13:28:50.706 ERROR java.lang.Throwable -   at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
18-08-18 13:28:50.706 ERROR java.lang.Throwable -   at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
18-08-18 13:28:50.707 ERROR java.lang.Throwable -   at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:553)
18-08-18 13:28:50.707 ERROR java.lang.Throwable -   at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:662)
18-08-18 13:28:50.707 ERROR java.lang.Throwable -   at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:686)
18-08-18 13:28:50.707 ERROR java.lang.Throwable -   at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)
18-08-18 13:28:50.707 ERROR java.lang.Throwable -   at ca.vdts.grading.model.Progress.getGradeSummaryList(Progress.java:18)
18-08-18 13:28:50.708 ERROR java.lang.Throwable -   at ca.vdts.grading.controllers.ProgressController.updateDisplay(ProgressController.java:155)
18-08-18 13:28:50.708 ERROR java.lang.Throwable -   at ca.vdts.grading.controllers.ProgressController.monitorSelected(ProgressController.java:125)
18-08-18 13:28:50.708 ERROR java.lang.Throwable -   at ca.vdts.grading.controllers.ProgressController.lambda$initialize$3(ProgressController.java:88)
18-08-18 13:28:50.708 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
18-08-18 13:28:50.708 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
18-08-18 13:28:50.709 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
18-08-18 13:28:50.709 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
18-08-18 13:28:50.709 ERROR java.lang.Throwable -   at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
18-08-18 13:28:50.709 ERROR java.lang.Throwable -   at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
18-08-18 13:28:50.709 ERROR java.lang.Throwable -   at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:102)
18-08-18 13:28:50.710 ERROR java.lang.Throwable -   at javafx.scene.control.ComboBox$ComboBoxSelectionModel.lambda$new$154(ComboBox.java:494)
18-08-18 13:28:50.710 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
18-08-18 13:28:50.710 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
18-08-18 13:28:50.711 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:72)
18-08-18 13:28:50.711 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
18-08-18 13:28:50.711 ERROR java.lang.Throwable -   at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:113)
18-08-18 13:28:50.711 ERROR java.lang.Throwable -   at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:147)
18-08-18 13:28:50.711 ERROR java.lang.Throwable -   at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:68)
18-08-18 13:28:50.712 ERROR java.lang.Throwable -   at javafx.scene.control.SingleSelectionModel.updateSelectedIndex(SingleSelectionModel.java:215)
18-08-18 13:28:50.712 ERROR java.lang.Throwable -   at javafx.scene.control.SingleSelectionModel.select(SingleSelectionModel.java:149)
18-08-18 13:28:50.712 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.lambda$createListView$323(ComboBoxListViewSkin.java:484)
18-08-18 13:28:50.712 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349)
18-08-18 13:28:50.713 ERROR java.lang.Throwable -   at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
18-08-18 13:28:50.713 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:72)
18-08-18 13:28:50.713 ERROR java.lang.Throwable -   at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
18-08-18 13:28:50.713 ERROR java.lang.Throwable -   at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:113)
18-08-18 13:28:50.714 ERROR java.lang.Throwable -   at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:147)
18-08-18 13:28:50.714 ERROR java.lang.Throwable -   at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:68)
18-08-18 13:28:50.714 ERROR java.lang.Throwable -   at javafx.scene.control.MultipleSelectionModelBase.select(MultipleSelectionModelBase.java:404)
18-08-18 13:28:50.714 ERROR java.lang.Throwable -   at javafx.scene.control.MultipleSelectionModelBase.clearAndSelect(MultipleSelectionModelBase.java:356)
18-08-18 13:28:50.714 ERROR java.lang.Throwable -   at javafx.scene.control.ListView$ListViewBitSetSelectionModel.clearAndSelect(ListView.java:1403)
18-08-18 13:28:50.715 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.behavior.CellBehaviorBase.simpleSelect(CellBehaviorBase.java:256)
18-08-18 13:28:50.715 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.behavior.CellBehaviorBase.doSelect(CellBehaviorBase.java:220)
18-08-18 13:28:50.716 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:150)
18-08-18 13:28:50.716 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:95)
18-08-18 13:28:50.716 ERROR java.lang.Throwable -   at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
18-08-18 13:28:50.717 ERROR java.lang.Throwable -   at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
18-08-18 13:28:50.717 ERROR java.lang.Throwable -   at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
18-08-18 13:28:50.717 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
18-08-18 13:28:50.717 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
18-08-18 13:28:50.718 ERROR java.lang.Throwable -   at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
18-08-18 13:28:50.718 ERROR java.lang.Throwable -   at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
18-08-18 13:28:50.718 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
18-08-18 13:28:50.719 ERROR java.lang.Throwable -   at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
18-08-18 13:28:50.719 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
18-08-18 13:28:50.719 ERROR java.lang.Throwable -   at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
18-08-18 13:28:50.720 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
18-08-18 13:28:50.720 ERROR java.lang.Throwable -   at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
18-08-18 13:28:50.720 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
18-08-18 13:28:50.721 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
18-08-18 13:28:50.721 ERROR java.lang.Throwable -   at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
18-08-18 13:28:50.721 ERROR java.lang.Throwable -   at javafx.event.Event.fireEvent(Event.java:198)
18-08-18 13:28:50.721 ERROR java.lang.Throwable -   at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
18-08-18 13:28:50.722 ERROR java.lang.Throwable -   at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
18-08-18 13:28:50.722 ERROR java.lang.Throwable -   at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
18-08-18 13:28:50.722 ERROR java.lang.Throwable -   at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
18-08-18 13:28:50.722 ERROR java.lang.Throwable -   at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
18-08-18 13:28:50.723 ERROR java.lang.Throwable -   at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
18-08-18 13:28:50.723 ERROR java.lang.Throwable -   at java.security.AccessController.doPrivileged(Native Method)
18-08-18 13:28:50.723 ERROR java.lang.Throwable -   at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:417)
18-08-18 13:28:50.723 ERROR java.lang.Throwable -   at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
18-08-18 13:28:50.723 ERROR java.lang.Throwable -   at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
18-08-18 13:28:50.724 ERROR java.lang.Throwable -   at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
18-08-18 13:28:50.724 ERROR java.lang.Throwable -   at com.sun.glass.ui.View.notifyMouse(View.java:937)
18-08-18 13:28:50.724 ERROR java.lang.Throwable -   at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
18-08-18 13:28:50.724 ERROR java.lang.Throwable -   at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
18-08-18 13:28:50.725 ERROR java.lang.Throwable -   at java.lang.Thread.run(Thread.java:748)

成绩汇总类:

public class GradeSummary {
    private BoardGrade grade;
    private Integer pieceCount;
    private Integer footage;

    public GradeSummary(BoardGrade grade, Long pieceCount, Long footage) {
        this.grade = grade;
        this.pieceCount = pieceCount.intValue();
        this.footage = footage.intValue();
    }

    public BoardGrade getGrade() {
        return grade;
    }

    public Integer getPieceCount() {
        return pieceCount;
    }

    public Integer getFootage() {
        return footage;
    }
}

以及 Board 的字段名称:

private LocalDateTime timeStamp;
private User grader;
private Species species;
private Integer length;
private Integer width;
private Integer surfaceMeasure;
private Integer thickness;
private Integer footBoardMeasure;
private BoardGrade grade;
private BoardModifier modifier;
private BigDecimal price;
private BigDecimal rate;
private Pack pack;
private Batch batch;
private PackDescriptor packDescriptor;
private BoardLoad boardLoad;

最佳答案

GradeSummary 需要一个无参数构造函数。通过提供您自己的,您删除了默认的。

原因是 JPA 需要创建对象的实例,然后对它进行水合。它必须通过在类上调用 newInstance() 来启动此操作,并且不知道参数。

关于java - 为什么 Hibernate/JPA 在查询中报告空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51911210/

相关文章:

java - 关闭连接

java - 在 Java 中将两个值添加到 HashMap 中的键

java - hibernate中定制逆向工程策略后忽略包名

java - 如何创建单向关系,其中关系由子实体拥有,但父实体是定义关系的位置

JavaFX - MediaPlayer 不工作

java - Espresso-web 检查网页元素不存在

java - Spring 4 MVC 和 Websockets - 没有合适的默认 RequestUpgradeStrategy

sql-server-2005 - Hibernate 存储过程结果

java - 静态元模型 JPA 中的多态关联

hibernate - 如何让 JPA 与 Hibernate 提供程序自动扫描实体类