Inject PersistenceContext with CDI

后端 未结 2 1428
孤城傲影
孤城傲影 2020-12-19 22:31

Currently, I\'m using PersistenceContext to inject an EntityManager. The EM is injected perfectly.

@Stateless
public StatelessSessionBean implements Stateles         


        
2条回答
  •  温柔的废话
    2020-12-19 23:06

    The best practice for persistence context and CDI is to make them CDI bean to avoid these kind of issue.

    public class MyProducers {
        @Produces
        @PersistenceContext(unitName = "MyPersistenceUnit")
        private EntityManager em;
    }
    

    After that you'll be able to inject the EntityManager in CDI way. Taking your EJB it'll be :

    @Stateless
    public StatelessSessionBean implements StatelessSessionBeanLocal {
    
        @Inject
        private EntityManager em;
    
        @Override
        public Collection getAllObjects(){
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriqQuery query = cb.createQuery(MyObject.class);
            query.from(MyObject);
            return em.createQuery(query).getResultList();
        }
    }
    

    This way, you'll be able to decorate your CDI bean with no issue.

    If you have multiple EntityManagers you can use CDI qualifiers to distinguish them

提交回复
热议问题