Jpa 从“表不工作”中选择最大值(项id)

Jpa 从“表不工作”中选择最大值(项id),jpa,nullpointerexception,eclipselink,Jpa,Nullpointerexception,Eclipselink,我试图运行这个查询从表中选择max(item.id),但它返回javax.persistence.PersistenceException:java.lang.NullPointerException。桌子不是空的。我在PHPMyAdmin中试用过,效果很好 这是我的代码: public Long generateId(String beanName, String idName) { String requete = "SELECT max(item." + idName +

我试图运行这个查询
从表中选择max(item.id)
,但它返回
javax.persistence.PersistenceException:java.lang.NullPointerException
。桌子不是空的。我在PHPMyAdmin中试用过,效果很好

这是我的代码:

public Long generateId(String beanName, String idName) {
        String requete = "SELECT max(item." + idName + ") FROM " + beanName + " item";
        List<Long> maxId = getEntityManager().createQuery(requete).getResultList();
        if (maxId == null || maxId.isEmpty() || maxId.get(0) == null) {
            return 1L;
        }
        return maxId.get(0) + 1;
    }

这里没有足够的信息来回答这个问题。我们需要查看所有Java代码来访问数据库和异常的完整堆栈,而不仅仅是异常的类型。NPE可能来自任何地方。您的问题很模糊,但请尝试以下操作:
entityManager.createQuery(“从表t中选择max(t.id)).getSingleResult()查看编辑,我添加了代码和完整堆栈。用户getEntityManager().createNativeQuery(requete.getResultList();
Caused by: javax.persistence.PersistenceException: java.lang.NullPointerException
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:480)
    at service.AbstractFacade.generateId(AbstractFacade.java:61)
    at service.NotificationFacade.preparerNotification37(NotificationFacade.java:340)
    at service.NotificationFacade.estimerMontantNotification(NotificationFacade.java:417)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46)
    at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
    at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
    at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
    ... 54 more
Caused by: java.lang.NullPointerException
    at org.eclipse.persistence.internal.sessions.CollectionChangeRecord.addAdditionChange(CollectionChangeRecord.java:106)
    at org.eclipse.persistence.internal.queries.ContainerPolicy.compareCollectionsForChange(ContainerPolicy.java:560)
    at org.eclipse.persistence.mappings.CollectionMapping.compareCollectionsForChange(CollectionMapping.java:574)
    at org.eclipse.persistence.mappings.CollectionMapping.calculateDeferredChanges(CollectionMapping.java:541)
    at org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy.createObjectChangeSet(AttributeChangeTrackingPolicy.java:75)
    at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChanges(DeferredChangeDetectionPolicy.java:91)
    at org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy.calculateChangesForExistingObject(AttributeChangeTrackingPolicy.java:48)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:664)
    at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:438)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:863)
    at org.eclipse.persistence.internal.jpa.QueryImpl.performPreQueryFlush(QueryImpl.java:963)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:207)
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)
    ... 86 more