2011-02-09 14 views
14

He estado intentando aprender sobre la primavera y la hibernación, y he utilizado muchos ejemplos en la red para armar una buena aplicación. Sin embargo, me di cuenta ahora de que Spring admite la administración de transacciones. En mi aplicación de primavera simplemente hice todas las llamadas que quería, directamente para hibernar. ¿Hay alguna razón/beneficio en cuanto a por qué la gente usaría la gestión de transacciones de Spring/db?Beneficios de usar Springs Gestión de transacciones versus uso de hibernación

+1

¿Está utilizando dos fases se compromete en una base de datos, así como a otro lugar - Uso de primavera. de lo contrario, elige el que quieras usar. –

+0

¿Qué es un compromiso en dos fases si pudiera preguntar? –

Respuesta

24

Las ventajas reales son:

  • sintaxis declarativa de peso ligero. Compare:

    public void saveEmployee(Employee e) { 
        Session s = sf.getCurrentSession();  
        s.getTransaction().begin(); 
        s.save(e);  
        s.getTransaction().commit(); 
    } 
    

    y

    @Transactional 
    public void saveEmployee(Employee e) { 
        sf.getCurrentSession().save(e); 
    } 
    
  • propagación de transacción flexible. Imagine que ahora necesita ejecutar este método saveEmployee() como parte de una transacción compleja.Con la gestión manual de transacciones, necesita cambiar el método ya que la gestión de transacciones está codificada. Con la primavera, la propagación de transacciones funciona sin problemas:

    @Transactional 
    public void hireEmployee(Employee e) { 
        dao.saveEmployee(e); 
        doOtherStuffInTheSameTransaction(e); 
    } 
    
  • reversión automática en el caso de excepciones

+0

Supongo que debería preguntar, ¿cuál es el beneficio de usar hibernate con Spring? ¿Hibernate todavía trae algo a la mesa? –

+0

@John: ¿Comparado con Spring sin Hibernate o Hibernate sin Spring? – axtavt

+0

Estoy tratando de entender por qué alguien realmente usaría Hibernate si tuviera Spring. No parece que Hibernate los compre mucho. O tal vez me estoy perdiendo algo. –

8

El spring's reference doc menciones muy claro

El Spring Framework proporciona una abstracción consistente para la transacción gestión que ofrece los siguientes beneficios:

  • proporciona un modelo de programación consistente a través de diferentes transacciones API como JTA, JDBC, Hibernate, JPA y JDO.
  • Admite la gestión de transacciones declarativas.
  • Proporciona una API más simple para la administración de transacciones programáticas que una serie de transacciones complejas API como JTA.
  • Se integra muy bien con varias abstracciones de acceso a datos de Spring.

proporciona un modelo de programación consistente a través de diferentes transacción APIs tales como JTA, JDBC, Hibernate, JPA y JDO.

Digamos que actualmente utiliza la api de hibernación para la gestión de transacciones y, en algún momento, le conviene cambiar a JDO. Esto requiere el cambio de código de gestión de transacciones. Si usa Spring entonces no hay cambio.

Admite la gestión de transacciones declarativas.

similares a EJB

proporciona una API simple para la gestión de transacciones programática que un número de transacciones complejas API como JTA.

JTA y JDBC tienen diferentes API para la gestión de transacciones. Spring lo resuelve proporcionando una API uniforme.

+0

Sí, pero en términos reales no estoy seguro de lo que eso significa. ¿Es una práctica estándar utilizar la gestión de transacciones de Spring sobre Hibernates? ¿No te estás perdiendo algunos de los beneficios de usar hibernate de esta manera? –

+1

@John Baker - No, no lo eres. El HibernateTransactionManager de Spring (como era de esperar) utiliza las características de las transacciones de Hibernate, al tiempo que aprovecha la ventaja de las abstracciones unificadas de transacciones de Spring. Si está utilizando Spring y está usando transacciones, entonces debe usar las transacciones de Spring. – OrangeDog

Cuestiones relacionadas