2012-05-29 21 views
7

Encontré ejemplos que usan este constructo aunque no estoy seguro de qué puedo obtener de esto?¿Qué obtengo al configurar este TransactionAttributeType.NOT_SUPPORTED

¿Significa que todas las sentencias seleccionadas en un EJB sin estado deberían seguir esto?

@Stateless 
public class EmployeeFacade { 
    @PersistenceContext(unitName="EmployeeService") 
    EntityManager em; 

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
    public List<Department> findAllEmployees() { 
     return em.createQuery("SELECT e FROM Employee e", 
     Employee.class) 
     .getResultList(); 
    } 

¿Qué obtengo de esto?

Gracias.

Respuesta

6

Lo que se obtiene es:

  1. forma relativamente formal para decirle que su método no necesita transacción (como consecuencia usted sabe, por ejemplo, que no va a llamar a persistir, fusionar o eliminar en EntityManager).
  2. Posible optimización del rendimiento en algunos casos.
    • No es necesario crear/pasar la transacción. Según Java EE 5 Tutorial: "Debido a que las transacciones implican gastos generales, este atributo puede mejorar el rendimiento".
    • Según otras fuentes (por ejemplo, Pro JPA 2) ofrece la posibilidad de implementaciones para no crear administradas entidades en absoluto (que es probablemente una operación más pesada que la creación de entidades independientes de inmediato).
+1

¿Cómo ejecuta el EntityManager la consulta sin una transacción? /confuso/ –

Cuestiones relacionadas