2011-01-18 5 views

ответ

7

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

@PersistenceContext 
EntityManager em; 

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

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

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

+0

Хорошо, спасибо. Я использовал em в конструкторе – Alf

+2

Обратите внимание, что EntityManager не будет использовать транзакции, управляемые контейнером (CMT), если они будут введены в управляемый компонент JSF. До Java EE 7 только EJB использовали транзакции, управляемые контейнерами, а Java EE 7 расширили CMT только до CDI-компонентов, а не к устаревшим управляемым компонентам JSF. Другими словами, если есть ошибка, транзакция не будет откатываться контейнером: вам придется управлять этим самостоятельно. [Ссылка] (http://stackoverflow.com/a/17842796/201891) и [ссылка] (https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt). – DavidS

+1

Пять месяцев спустя, и я не уверен, что мой предыдущий комментарий верен. Я никогда не тестировал это: я только что сделал вывод из того, что я прочитал. : - \ – DavidS