HibernateTransactionManager o JpaTransactionManager

Desarrollando una aplicación con un amigo, pero encontré una pregunta … Tenía este código:

   classpath:hibernate.cfg.xml    ${jdbc.dialect} true create         

Y lo sacó todo, lo cambió por:

         

Dijo que este es un mejor enfoque, pero no explicó exactamente por qué. Algo acerca de no usar Hibernate directamente, ¿significa esto que ya no usaremos Hibernate? ¿Es realmente mejor enfoque?

DAO cambió así:

Tuve:

 @Autowired private SessionFactory sessionFactory; public void addUser(User user) { sessionFactory.getCurrentSession().save(user); } 

Ahora es:

 @PersistenceContext private EntityManager entityManager; public void addUser(User user) { entityManager.persist(user); } 

Quiere que su código dependa de JPA, en lugar de Hibernate. javax.persistence.EntityManager es una interfaz estándar JPA (Java EE), mientras que org.hibernate.SessionFactory es una interfaz propietaria de Hibernate. Pasar de SessionFactory a EntityManager hace que sus clases ya no dependan de Hibernate. La mayoría de las personas considera que usar JPA-way en lugar de Hibernate-way es la mejor práctica.

Tenga en cuenta que su sistema aún depende de Hibernate, ya que necesita un proveedor de JPA. Pero si desea cambiar a otro proveedor de JPA en el futuro, debería ser bastante sencillo. Otra ventaja de ir por JPA es que las interfaces JPA son más estables que las de Hibernate.