gpt4 book ai didi

java - @Inject 在 java EE 中给出 NullPointer 异常

转载 作者:行者123 更新时间:2023-12-02 10:19:34 25 4
gpt4 key购买 nike

我正在尝试创建一个网络服务,提供一些通过 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();
}
}

每当我调用 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 给我错误“Class not returned:controller.dbController”。

hibernate 肯定可以工作......所以问题不存在。这是我第一次尝试使用依赖注入(inject),但我不确定我做错了什么。

谢谢

最佳答案

你不能注入(inject)POJO,它必须是一个Bean。因此使其成为bean需要注释,例如:

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

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

然后,当你有一个 Bean 时,不允许使用static final,因此需要像这样进行更改:

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

但实际上获取EntityManager的最简单方法就是注入(inject)它。喜欢:

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

关于java - @Inject 在 java EE 中给出 NullPointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com