Java JPA中的NullPointerException
我正在使用jpa创建一个JavaEE应用程序 当代码在服务器上运行时,我遇到以下错误Java JPA中的NullPointerException,java,database,jakarta-ee,jpa,nullpointerexception,Java,Database,Jakarta Ee,Jpa,Nullpointerexception,我正在使用jpa创建一个JavaEE应用程序 当代码在服务器上运行时,我遇到以下错误 [2/25/12 22:56:31:371 IST] 00000047 SystemOut O hello [2/25/12 22:56:31:375 IST] 00000047 SystemOut O Error...:( [2/25/12 22:56:31:371 IST] 00000047 SystemErr R java.lang.NullPointerE
[2/25/12 22:56:31:371 IST] 00000047 SystemOut O hello
[2/25/12 22:56:31:375 IST] 00000047 SystemOut O Error...:(
[2/25/12 22:56:31:371 IST] 00000047 SystemErr R java.lang.NullPointerException
[2/25/12 22:56:31:371 IST] 00000047 SystemErr R at plh.service.ejb.UserBean.getUserDetails(UserBean.java:41)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:45)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at java.lang.reflect.Method.invoke(Method.java:599)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:65)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:113)
[2/25/12 22:56:31:372 IST] 00000047 SystemErr R at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:374)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:790)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
[2/25/12 22:56:31:373 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:859)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[2/25/12 22:56:31:374 IST] 00000047 SystemErr R at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[2/25/12 22:56:31:375 IST] 00000047 SystemErr R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[2/25/12 22:56:31:375 IST] 00000047 SystemErr R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
[2/25/12 22:56:31:375 IST] 00000047 SystemErr R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
[2/25/12 22:56:31:375 IST] 00000047 SystemErr R at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
[2/25/12 22:56:31:375 IST] 00000047 SystemErr R at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
UserBean.java中的第41行是:
//在UserBean.java中,包含一个无状态EJB的UserBean
public class UserBean implements UserBeanInterface {
/**
* Default constructor.
*/
@PersistenceContext
private EntityManager manager;
public UserBean() {
}
public String authenticate(String name){
return null;
}
public String changePassword(){
return null;
}
public String setUserDetails(){
return null;
}
public String getUserDetails(){
System.out.println("hello");
try{
41=> Query query=manager.createQuery("from User");
List<User> results = query.getResultList();
if(results.size()!=0){
Iterator<User> stIterator=results.iterator();
while(stIterator.hasNext()){
User st=stIterator.next();
System.out.print("User Id:"+st.getUserId());
System.out.print("Type:"+st.getUserType());
System.out.print("Detail:"+st.getUserProfile());
}
}
else
{
System.out.println("Record not found.");
}
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("Error...:(");
}
return "hi";
}
}
用户类User是从数据库表自动生成的。数据库中有一个用户表。请帮助说明此错误的可能原因。您的EntityManager没有在客户端UserBean中注入企业Java Bean的接口。EJB应该注入到生命周期由应用服务器管理的类中
客户机必须是web组件或另一个企业bean。在您的例子中,客户机UserBean是一个POJO普通旧Java对象。有关如何使用EJB的更多详细信息,请参阅
一个可能的简单解决方案是通过在类定义之前添加注释javax.ejb.Stateless,使UserBean成为无状态会话Bean。最后,您应该使用EJB注释将UserBean注入到ManagedBean中。您的EntityManager管理器不是注入到客户机UserBean中的企业Java Bean接口。EJB应该注入到生命周期由应用服务器管理的类中 客户机必须是web组件或另一个企业bean。在您的例子中,客户机UserBean是一个POJO普通旧Java对象。有关如何使用EJB的更多详细信息,请参阅
一个可能的简单解决方案是通过在类定义之前添加注释javax.ejb.Stateless,使UserBean成为无状态会话Bean。您最终应该使用EJB注释将UserBean注入到ManagedBean中。在这种情况下,请确保编写the@EJB在创建包含实体管理器的类的对象之前进行注释。 空指针异常的原因通常是因为entitymanager未初始化。 @EJB注释就是这样做的 在您的例子中,您声明用户类write对象的类
@这应该可以解决问题。在这种情况下,请确保编写the@EJB在创建包含实体管理器的类的对象之前进行注释。 空指针异常的原因通常是因为entitymanager未初始化。 @EJB注释就是这样做的 在您的例子中,您声明用户类write对象的类
@这应该可以解决问题。请显示整个类,尤其是manager属性。manager是唯一可以为空的东西,您如何访问持久性管理器?@nico_ekito我已经添加了整个UserBean类。。。请帮助…我不明白-哪一行是第41行?抱歉,我在更新代码时错误地删除了它…请显示整个类,特别是manager属性。manager是唯一可以为空的东西,您如何访问持久性管理器?@nico_ekito我已经添加了整个UserBean类。。。请帮忙…我不明白-哪一个是第41行?对不起,错了,我在更新代码时删除了它…好的。。。但是我没有完全理解。如何注入javax.persistence.EntityManager??一个可能的简单解决方案是通过在类定义之前添加注释javax.ejb.Stateless,使UserBeanInterface成为无状态会话Bean。您最终应该使用EJB注释将UserBeanInterface注入到ManagedBean中。如何使接口成为无状态会话Bean?我仍然不明白。。。你能举个例子吗。。。但是我没有完全理解。如何注入javax.persistence.EntityManager??一个可能的简单解决方案是通过在类定义之前添加注释javax.ejb.Stateless,使UserBeanInterface成为无状态会话Bean。您最终应该使用EJB注释将UserBeanInterface注入到ManagedBean中。如何使接口成为无状态会话Bean?我仍然不明白。。。你能举个例子吗…?这是一个老帖子。我很久以前就用上面的答案解决了这个问题。无论如何,谢谢你的发帖。嗯,这是一篇老文章。我很久以前就用上面的答案解决了这个问题。无论如何,谢谢你的发帖。