hibernate создает исключение NullPointerException при вызове метода query.list - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь получить некоторые данные из своей базы данных, выполнив запрос с помощью hibernate. Затем данные сохраняются в списке с использованием метода query.list. Проблема в том, что я получаю исключение nullPointerException при запуске метода query.list, который, как я предполагаю, заключается в том, что запрос не возвращает никаких данных для перечисления.

Это метод, который производит исключение

public static void getDataForMonth(int yearCount ,int monthCount){
        try {
            session.beginTransaction();
            LocalDate date = LocalDate.of(yearCount, monthCount, 1);

            Query query = session.createQuery("select t from Task t where month(t.date) = month(:date)  and year(t.date) = year(:date)");

            query.setParameter("date", dtf.format(date));
            taskList = query.list();
            session.getTransaction().commit();

            } finally {
            session.close();
        }
    }

и это журнал:

Exception in Application constructor
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class tadej.Main
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:963)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:875)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
    ... 1 more
Caused by: java.lang.NullPointerException
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitGenericFunction(BaseSqmToSqlAstConverter.java:1184)
    at org.hibernate.query.sqm.tree.expression.function.SqmGenericFunction.accept(SqmGenericFunction.java:49)
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitRelationalPredicate(BaseSqmToSqlAstConverter.java:1774)
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitRelationalPredicate(BaseSqmToSqlAstConverter.java:213)
    at org.hibernate.query.sqm.tree.predicate.RelationalSqmPredicate.accept(RelationalSqmPredicate.java:72)
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitAndPredicate(BaseSqmToSqlAstConverter.java:1752)
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitAndPredicate(BaseSqmToSqlAstConverter.java:213)
    at org.hibernate.query.sqm.tree.predicate.AndSqmPredicate.accept(AndSqmPredicate.java:33)
    at org.hibernate.query.sqm.consume.spi.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:417)
    at org.hibernate.sql.ast.produce.sqm.spi.SqmSelectToSqlAstConverter.visitSelectStatement(SqmSelectToSqlAstConverter.java:189)
    at org.hibernate.sql.ast.produce.sqm.spi.SqmSelectToSqlAstConverter.interpret(SqmSelectToSqlAstConverter.java:113)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:162)
    at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:275)
    at org.hibernate.query.internal.AbstractQuery.list(AbstractQuery.java:1302)
    at tadej.TaskManager.<init>(TaskManager.java:129)
    at tadej.ChartPanel.sortDataByDay(ChartPanel.java:47)
    at tadej.ChartPanel.<init>(ChartPanel.java:31)
    at tadej.PanelManager.<init>(PanelManager.java:12)
    at tadej.Main.<init>(Main.java:10)
    ... 13 more
Exception running application tadej.Main

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

Например:

public static void getDataByDescriptionAndDate(String description, String date) {
        try {
            session.beginTransaction();

            Query query = session.createQuery("select c.id, c.description, c.completion, c.date from Task c where c.description = :desc and c.date = :dt");

            query.setParameter("desc", description).setParameter("dt", date);
            taskList = query.list();
            session.getTransaction().commit();

        } finally {
            Main.getFactory().getCurrentSession().close();
        }
    }

Я попытался передать параметр даты в формате String, но возникла та же проблема, я также попытался выполнить запрос в MySQL, и он работает просто отлично, поэтому я действительно растерялся, почему он не работает в программе. Я настаиваю на этом запросе, поскольку он единственный, который я нашел, который будет возвращать данные, основанные на месяце и году, полученные из параметра даты, и если кто-то знает запрос, который также вернет мне данные, которые мне нужны, пожалуйста, сообщите мне.

1 Ответ

0 голосов
/ 05 апреля 2019

Проблема решена. Очевидно, что последняя версия hibernate не поддерживает функции month () и year (), поэтому мне придется выбрать необходимые данные в java из списка всех данных, взятых из базы данных, или использовать другой запрос.

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