NullPointerException在JPA [英] NullPointerException in JPA

查看:130
本文介绍了NullPointerException在JPA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用jpa创建一个Java EE应用程序。

I am creating a Java EE application using jpa.

当代码在服务器上运行时,我收到以下错误

I am getting the following error when the code is run on server

    [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行是:

Line no 41 in UserBean.java is :

//在UserBean.java中,包含UserBean无状态EJB

//within UserBean.java, containing UserBean a stateless EJB

    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类User已经从数据库表中自动生成,数据库中有一个USER表。请帮助解决此错误的可能原因。

The User class, User has been generated automatically from the database tables. There is a USER table in the database. Please help on what the possible reason for this error could be.

推荐答案

您的 EntityManager manager 是在客户端注入的企业Java Bean的非接口 UserBean 。EJB应该注入类

Your EntityManager manager is no-interface an Enterprise Java Bean injected in your client UserBean. EJBs should be injected in classes whose lifecycle is managed by the application server.

客户端必须是Web组件或另一个企业bean。在您的情况下,客户端 UserBean 是一个POJO(普通Java对象)。参见

The client must be either a web component or another enterprise bean. In your case, the client UserBean is a POJO (Plain Old Java Object). See here for further details about how to use EJBs.

一个可能的简单解决方案是通过添加注释javax.ejb使UserBean成为一个无状态会话Bean。无类之前的类定义。最后,您应该使用EJB注释将UserBean注入到您的ManagedBean中。

A possible simple solution is to make UserBean a Stateless Session Bean by adding the annotation javax.ejb.Stateless before the class definition. And you should eventually inject UserBean into your ManagedBean with the EJB annotation.

这篇关于NullPointerException在JPA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆