Java JPA Query.getResultList(结果列表为空)
此参数中的所有问题都表明,如果查询没有结果,Hibernate框架将返回null(如果是较旧版本)或空列表(如果是较新版本)。 在我的例子中,我正在执行以下代码:Java JPA Query.getResultList(结果列表为空),java,hibernate,jpa,Java,Hibernate,Jpa,此参数中的所有问题都表明,如果查询没有结果,Hibernate框架将返回null(如果是较旧版本)或空列表(如果是较新版本)。 在我的例子中,我正在执行以下代码: 22 public boolean aggiungiUtente(String nomeOperatore, String password, String idSuperUser){ 23 KinOperatoreEntity nuovo = new KinOperatoreEntity(); 24 int ul
22 public boolean aggiungiUtente(String nomeOperatore, String password, String idSuperUser){
23 KinOperatoreEntity nuovo = new KinOperatoreEntity();
24 int ultimo = prendiMaxIdUser();
27 ultimo++;
28 nuovo.setIdOperatore(ultimo);
29 nuovo.setPassword(password);
30 nuovo.setUsername(nomeOperatore);
31 nuovo.setCodiceAttivita(idSuperUser);
32 em.persist(nuovo);
33 return true;
}
36 private int prendiMaxIdUser() {
37 String query = "SELECT max(k.idOperatore) from KinOperatoreEntity k";
38 Query q = em.createQuery(query);
39 List<Integer> lista= q.getResultList();
41 if(lista == null) return -1;
42 if(lista.isEmpty()) return -1;
44 int result = lista.get(0);
46 return result;
}
用整数编辑
22 public boolean aggiungiUtente(String nomeOperatore, String password, String idSuperUser){
24 KinOperatoreEntity nuovo = new KinOperatoreEntity();
25 int ultimo = prendiMaxIdUser();
27 ultimo++;
28 nuovo.setIdOperatore(ultimo);
29 nuovo.setPassword(password);
30 nuovo.setUsername(nomeOperatore);
31 nuovo.setCodiceAttivita(idSuperUser);
32 em.persist(nuovo);
33 return true;
}
36 private int prendiMaxIdUser() {
37 String query = "SELECT max(k.idOperatore) from KinOperatoreEntity k";
38 Query q = em.createQuery(query);
39 List<Integer> lista= q.getResultList();
41 if(lista == null) return -1;
42 if(lista.isEmpty()) return -1;
44 Integer result = lista.get(0);
46 return result;
}
Caused by: java.lang.NullPointerException
at javaEjbs.UtentiEjb.prendiMaxIdUser(UtentiEjb.java:46)
at javaEjbs.UtentiEjb.aggiungiUtente(UtentiEjb.java:25)
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 org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93)
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64)
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:254)
... 152 more
22公共布尔aggiungiute(字符串nomeOperator、字符串密码、字符串idSuperUser){
24 KinOperatoreEntity nuovo=新的KinOperatoreEntity();
25 int ultimo=prendiMaxIdUser();
27 ultimo++;
28 nuovo.setIdOperatore(ultimo);
29 nuovo.setPassword(密码);
30 nuovo.setUsername(nomeOperatore);
31 nuovo.setCodiceAttivita(idSuperUser);
32 em.persist(努沃);
33返回true;
}
36 private int prendiMaxIdUser(){
37 String query=“从KinOperatoreEntity k中选择最大值(k.idOperatore)”;
38查询q=em.createQuery(查询);
39 List lista=q.getResultList();
41如果(lista==null)返回-1;
42 if(lista.isEmpty())返回-1;
44整数结果=lista.get(0);
46返回结果;
}
原因:java.lang.NullPointerException
在javaEjbs.UtentiEjb.prendiMaxIdUser(UtentiEjb.java:46)
在javaEjbs.UtentiEjb.aggiungiuente(UtentiEjb.java:25)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:564)
位于org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
在org.jboss.invocation.InterceptorContext$invocation.procedure(InterceptorContext.java:437)
位于org.jboss.as.weld.ejb.jsr29bindingSinterceptor.doMethodInterception(jsr29bindingSinterceptor.java:82)
位于org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(jsr29bindingsinterceptor.java:93)
位于org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
在org.jboss.invocation.InterceptorContext$invocation.procedure(InterceptorContext.java:437)
位于org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64)
位于org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
位于org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeincalertx(CMTTxInterceptor.java:254)
…还有152个
无法使用所有第二个堆栈跟踪进行编辑,第一部分(参考ejb)与前一个堆栈跟踪相同。如果表中没有与实体
KinOperatoreEntity
或者在所有行中,与字段idOperatore
对应的列为NULL
然后查询将返回一个带有单个NULL
项的列表
当您尝试从第46行的方法返回它时
返回类型为int
,它尝试取消对变量的装箱,将整数
转换为int
。但是由于结果
变量包含一个null
值,您会得到NullPointerException
lista.get(0)
返回null
,这是一个有效的整数
,但不能简单地分配给int
,并将导致您的NPE。但是在给定的信息下,没有人能告诉您为什么查询会返回该值。正如上帝指出的,首先将int
更改为整数
。然后您可能会注意到您只有一个null
列表中的值。如果您共享整个堆栈跟踪,可能会显示更多信息,但请检查查询/数据。事实上,NPE引用了对象lista为null的事实(因此,当我调用lista.get()时,它无法调用该方法,因为对象为null)。但是我检查lista是否为null之前只有两个命令!您需要什么信息?我可以告诉您所有人都试图在整数中更改int,但这与我正在使用stack traceCheck编辑的内容相同&将行号添加到您的代码段中可能会有所帮助。并且在代码段中也将其更改为整数结果
。NPE是否同时出现行,无论是int
还是Integer
?是的,您遇到了问题。同样感谢您理解我的问题,并解决了它添加if(lista.get(0)==null)返回0;
22 public boolean aggiungiUtente(String nomeOperatore, String password, String idSuperUser){
24 KinOperatoreEntity nuovo = new KinOperatoreEntity();
25 int ultimo = prendiMaxIdUser();
27 ultimo++;
28 nuovo.setIdOperatore(ultimo);
29 nuovo.setPassword(password);
30 nuovo.setUsername(nomeOperatore);
31 nuovo.setCodiceAttivita(idSuperUser);
32 em.persist(nuovo);
33 return true;
}
36 private int prendiMaxIdUser() {
37 String query = "SELECT max(k.idOperatore) from KinOperatoreEntity k";
38 Query q = em.createQuery(query);
39 List<Integer> lista= q.getResultList();
41 if(lista == null) return -1;
42 if(lista.isEmpty()) return -1;
44 Integer result = lista.get(0);
46 return result;
}
Caused by: java.lang.NullPointerException
at javaEjbs.UtentiEjb.prendiMaxIdUser(UtentiEjb.java:46)
at javaEjbs.UtentiEjb.aggiungiUtente(UtentiEjb.java:25)
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 org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82)
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93)
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64)
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:254)
... 152 more