2012-05-29 6 views
7

Mi capita di trovare esempi che utilizzano questo costrutto sebbene non sono sicuro di cosa posso ottenere da questo?Cosa ottengo dall'impostazione di questo TransactionAttributeType.NOT_SUPPORTED

Significa che tutte le istruzioni selezionate in un bean senza stato dovrebbero seguire questo?

@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(); 
    } 

Cosa ottengo da questo?

Grazie.

risposta

6

Quello che si ottiene è:

  1. modo relativamente formale per dire che il metodo non ha bisogno di transazione (come conseguenza si sa per esempio che non chiamerà persistono, unire o rimuovere in EntityManager).
  2. Possibile ottimizzazione delle prestazioni in alcuni casi.
    • Nessuna necessità di creare/passare la transazione. Secondo Java EE 5 Tutorial: "Poiché le transazioni comportano un sovraccarico, questo attributo può migliorare le prestazioni."
    • Secondo altre fonti (ad esempio Pro JPA 2) offre possibilità di implementazione per non creare gestite per le entità (operazione che è probabilmente più pesante rispetto alla creazione di entità distaccate subito).
+1

In che modo EntityManager esegue la query senza una transazione? /confuso/ –

Problemi correlati