我在使用JavaEE 5 ,NetBean6.0.1多语言版本,GalssFish v2。例如数据库有一个表User,有两个字段:name、password,再用NetBean生成了一个对应的User实体类,用NetBean为User实体类生成一个SessionBean。在运行如下代码时总是报NullPointerException:EntityManager em;
......
em.find(User.class, name);感觉应该很简单,但不知怎么回事,总是出现这个异常。请大家帮忙分析一下,非常谢谢!

解决方案 »

  1.   

    你把表名换一下看看,比如 T_User
      

  2.   

    我知道User是专用的。我不是用的User,用的Users。
      

  3.   

    EntityManager   em;
    你用的JPA吗?
    把管理类贴上来看看,最前面的10行就行
      

  4.   

    我使用的依赖注入。/////////////////
    ///实体类
    /////////////////
    @Entity
    @Table(name = "USERS")
    @NamedQueries({@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
    public class Users implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Column(name = "NAME", nullable = false)
        private String name;
        @Column(name = "PASSWORD", nullable = false)
        private String password;    ......    public Users(String name, String password) {
            this.name = name;
            this.password = password;
        }    public String getName() {
            return name;
        }    public void setName(String name) {
            this.name = name;
        }    public String getPassword() {
            return password;
        }    public void setPassword(String password) {
            this.password = password;
        }////////////////////////////////
    ////封装对Users实体的操作
    ////////////////////////////////
    public class UserCRUD {    @PersistenceContext
        private EntityManager em;    public UserCRUD() {
        }    ......    //仅仅列出了find方法
        public Users find(String id) {
            return em.find(base.entities.Users.class, id);
        }
        ......
    }////////////////////////////////////
    ///用JUnit对UserCRUD类生成的测试类
    ////////////////////////////////////
    public class UserCRUDTest {    public UserCRUDTest() {
        }    @BeforeClass
        public static void setUpClass() throws Exception {
        }    @AfterClass
        public static void tearDownClass() throws Exception {
        }    @Before
        public void setUp() {
        }    @After
        public void tearDown() {
        }    ......    //仅仅列出了find方法
        /**
         * Test of find method, of class UserCRUD.
         */
        @Test
        public void find() {
            System.out.println("find");
            String id = "romeo";       //用户名romeo
            UserCRUD instance = new UserCRUD();
            Users expResult = null;
            Users result = instance.find(id);
            assertEquals(expResult, result);
            // TODO review the generated test code and remove the default call to fail.
            fail("The test case is a prototype.");
        }    ......
    }
      

  5.   

    果然少了关键的一句话
    @Transactional // 这个必须加上才行
    public   class   UserCRUD   {        @PersistenceContext
            private   EntityManager   em; 
      

  6.   

    to:java2000_net我再去试试。@Transactional // 这个必须加上才行我看很多教材没有这个语句呢?包括官方的文档。
      

  7.   

    to:java2000_net 还是不行呢?我用的JavaEE中的JPA,不是Hibernate。@Transactional 似乎根本就没有这个标签!!!!真的有点晕了!
      

  8.   

    按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
      

  9.   

    @Transactional   
    是Spring的东西,你不是让Spring管理你的EntityManager吗!呵呵!
      

  10.   

    我直接用的JavaEE 5 中的JPA。今天调通了,不过又遇到一点新问题。SessionBean调用实体类,JSF Back Bean再调用SessionBean,这样没问题。但是当我试图在SessionBean和实体类之间用一个中间的类进行隔离时,又出这个异常。我估计是我对什么时候容器调用依赖注入没有搞清楚。
      

  11.   

    结贴,谢谢java2000_net、hahe7788,谢谢大家