@Inject дает исключение NullPointer в Java EE - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать веб-сервис, который дает некоторые результаты, полученные через 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://localhost/book/users всегда равна нулю.

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 () и установилпеременная db путем добавления нового dbController ().Однако Intellij выдает мне ошибку «Класс не загружен: controller.dbController».

Спящий режим работает наверняка ... поэтому проблема не в этом.Я впервые пытаюсь использовать Dependency Injection, но не уверен, что делаю не так.

Спасибо

1 Ответ

0 голосов
/ 30 января 2019

Вы не можете вводить POJO, это должен быть Боб.Поэтому для создания бина требуются аннотации, например:

@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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...