[java] Hibernate SessionFactory vs. EntityManagerFactory


Answers

Quiero agregar que también puede obtener la sesión de Hibernate llamando getDelegate() método getDelegate() desde EntityManager .

ex:

Session session = (Session) entityManager.getDelegate();
Question

Soy nuevo en Hibernate y no estoy seguro de si usar una SessionFactory o EntityManagerFactory para obtener la sesión de hibernación. ¿Cuál es la diferencia entre los dos? ¿Pros contras?




Prefiero la API JPA2 EntityManager sobre SessionFactory , porque se siente más moderna. Un simple ejemplo:

JPA:

@PersistenceContext
EntityManager entityManager;

public List<MyEntity> findSomeApples() {
  return entityManager
     .createQuery("from MyEntity where apples=7", MyEntity.class)
     .getResultList();
}

SessionFactory:

@Autowired
SessionFactory sessionFactory;

public List<MyEntity> findSomeApples() {
  Session session = sessionFactory.getCurrentSession();
  List<?> result = session.createQuery("from MyEntity where apples=7")
      .list();
  @SuppressWarnings("unchecked")
  List<MyEntity> resultCasted = (List<MyEntity>) result;
  return resultCasted;
}

Creo que está claro que el primero se ve más limpio y también es más fácil de probar porque EntityManager se puede burlar fácilmente.




Related