Внедрение диспетчера сущностей в управляемый компонент

Можно ли внедрить диспетчер сущностей (или его фабрику) в управляемый компонент jsf, используя @PersistenceContext (или @PersistenceUnit)?

Я пробовал, но ничего, я получаю исключение NullPointerException.


person Alf    schedule 18.01.2011    source источник


Ответы (1)


Да, это возможно. Это синтаксис.

@PersistenceContext
EntityManager em;

В вашем проекте должен быть файл persistence.xml. Кстати: я запускаю Glassfish 3.

После этого вы можете использовать такие методы, как em.createNamedQuery.

Также помните, что инъекция происходит после конструктора, поэтому, если вы пытаетесь выполнять функции базы данных в конструкторе, это не сработает. Вам нужно будет добавить аннотацию @PostConstruct к методу. Это, вероятно, проблема у вас есть.

person Drew H    schedule 18.01.2011
comment
Обратите внимание, что EntityManager не будет использовать транзакции, управляемые контейнером (CMT), если будет внедрен в управляемый компонент JSF. До Java EE 7 только EJB использовали транзакции, управляемые контейнером, а Java EE 7 расширила CMT только для компонентов CDI, а не для устаревших управляемых компонентов JSF. Другими словами, если есть ошибка, транзакция не будет откатана контейнером: вам придется управлять этим самостоятельно. Справочник и ссылка. - person DavidS; 29.01.2015
comment
Пять месяцев спустя, и я не уверен, что мой предыдущий комментарий верен. Я никогда не проверял это: я просто сделал вывод из того, что прочитал. :-\ - person DavidS; 06.07.2015