@Inject给出在Java EE一个空指针异常(@Inject gives a NullPoint

2019-11-05 11:10发布

我试图创建一个web服务,让通过Hibernate从数据库中获取了一定的成效。

@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();
    }
}

DB变量每当我打电话的http://本地主机/书/用户总是空。

该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”。

Hibernate的工作肯定......所以这个问题是不存在的。 这是我第一次尝试使用依赖注入,但我不知道我做错了。

谢谢

Answer 1:

你不能注入POJO它必须是一个Bean。 所以,使其成为一个豆需要注释,例如:

@Stateful
@LocalBean
public class dbController {..} // Should be DbController, start with CAPS

@Stateful // or maybe @Stateless ?
@LocalBean
public class HibernateUtil {..}

然后,当你有一颗豆,不允许使用static final使改变这样的需要:

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

但实际上获得的最简单的方法EntityManager只是还注入它。 喜欢:

@PersistenceContext// maybe also with unit name (unitName = "whatever_the_unit_name_is")
private EntityManager em;


文章来源: @Inject gives a NullPointer Exception in java EE