Я пытаюсь получить некоторые данные из своей базы данных, выполнив запрос с помощью 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, и он работает просто отлично, поэтому я действительно растерялся, почему он не работает в программе. Я настаиваю на этом запросе, поскольку он единственный, который я нашел, который будет возвращать данные, основанные на месяце и году, полученные из параметра даты, и если кто-то знает запрос, который также вернет мне данные, которые мне нужны, пожалуйста, сообщите мне.