Seleccionar página

Con la llegada de EJB 3 y JPA nace la figura del EntityManager para simplificar la persistencia de objetos.
Y gracias a las anotaciones, el EntityManager puede ser inyectado por el contenedor de EJBs.
Vamos a ver diferentes formas de obtener un EntityManager en Seam a través de anotaciones.

  • @PersistenceContext
    EntityManager entityManager;

    El EntityManager es inyectado directamente por el EJB container. El ciclo de vida del EntityManager inyectado de esta forma terminará cuando la transacción sea completada.
    Tras el cierre de la transacción, las entidades son desacopladas del contexto de persistencia, lo que puede dar lugar a una LazyLoadException.

  • @PersistenceContext(type=PersistenceContextType.EXTENDED)
    EntityManager entityManager;

    El EntityManager es inyectado directamente por el EJB container, y estará disponible aún después de que la transacción haya sido completa.
    Las entidades pueden seguir asociadas al contexto de persistencia durante varias interacciones.

  • @In
    EntityManager entityManager;

    De esta forma, el EntityManager es inyectado por Seam y asociado al contexto de conversación, con las mismmas características que un EntityManager de tipo extendido.

  • @PersistenceUnit
    EntityManagerFactory;

    public void getNewEmInstance() {
    return emf.createEntityManager();
    }

    Esta anotacion inyecta un EntityManagerFactory, que permite crear objetos EntityManager mediante el método EntityManagerFactory.createEntityManager();