Java JPA Query.getResultList(结果列表为空)

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

此参数中的所有问题都表明,如果查询没有结果,Hibernate框架将返回null(如果是较旧版本)或空列表(如果是较新版本)。 在我的例子中,我正在执行以下代码:

   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