猿问

@Inject 在 java EE 中给出 NullPointer 异常

我正在尝试创建一个 Web 服务,该服务提供一些通过休眠从数据库中获取的结果。


@Path("/book")

public class BookService {


    @Inject

    private dbController db;


    @GET

    @Produces(MediaType.TEXT_PLAIN)

    public String getBookTitle() {

        return "H2G2";

    }


    @GET

    @Path("/users")

    @Produces(MediaType.APPLICATION_JSON)

    public Response getUsers(){


        List<UserEntity> users = db.getUsers();



        return Response.ok(users,MediaType.APPLICATION_JSON).build();

    }

}

每当我调用http://localhost/book/users时,db 变量始终为空。


dbController 是:


public class dbController {


    @Inject

    private HibernateUtil util;


    public List<UserEntity> getUsers(){


        List<UserEntity> result = null;

        try{

            result = (List<UserEntity>) this.util.createQuery("select e from UserEntity e");

        }catch (Exception e){

            System.out.println(e.getMessage());

        }


        return result;

    }

}

HibernateUtil 是:


public class HibernateUtil {


    private static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("NewPersistenceUnit");

    private EntityManager entityManager = null;



    private void createEntityManager(){

        if (this.entityManager==null){

            this.entityManager = entityManagerFactory.createEntityManager(); // here is your persistence unit name

        }



    }


    private void closeConnection(){

        this.entityManager.close();

        this.entityManager = null;

    }


    public List createQuery(String query) throws Exception{

        this.createEntityManager();

        List result;


        try{

            result = this.entityManager.createQuery(query).getResultList();

        }catch (Exception e){

            throw new Exception(e.getMessage());

        }


        return result;

    }



}

我正在使用 intellij,并在 db.getUsers() 处添加了一个断点,并通过添加新的 dbController() 来设置变量 db。但是,Intellij 给了我错误“未加载类:controller.dbController”。


休眠肯定有效......所以问题不存在。这是我第一次尝试使用依赖注入,但我不确定我做错了什么。


谢谢


莫回无
浏览 116回答 1
1回答

PIPIONE

您不能注入 POJO,它必须是 Bean。因此,使其成为 bean 需要注释,例如:@Stateful@LocalBeanpublic class dbController {..} // Should be DbController, start with CAPS和@Stateful // or maybe @Stateless ?@LocalBeanpublic class HibernateUtil {..}然后,当您有一个 Bean 时,它是不允许使用的static final,因此需要进行如下更改:private EntityManagerFactory entityManagerFactory =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Persistence.createEntityManagerFactory("NewPersistenceUnit");但实际上最简单的获取EntityManager方法就是也注入它。像:@PersistenceContext// maybe also with unit name (unitName = "whatever_the_unit_name_is")private EntityManager em;
随时随地看视频慕课网APP

相关分类

Java
我要回答