我正在尝试创建一个 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”。休眠肯定有效......所以问题不存在。这是我第一次尝试使用依赖注入,但我不确定我做错了什么。谢谢
1 回答
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
PIPIONE
TA贡献1829条经验 获得超9个赞
您不能注入 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方法就是也注入它。像:
@PersistenceContext// maybe also with unit name (unitName = "whatever_the_unit_name_is")
private EntityManager em;
添加回答
举报
0/150
提交
取消