java Hibernate SessionFactory vs. EntityManagerFactory





3 Answers

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

ex:

Session session = (Session) entityManager.getDelegate();
java hibernate jpa sessionfactory hibernate-entitymanager

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




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

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.




La interfaz de EntityManager es similar a sessionFactory en hibernación. EntityManager bajo el paquete javax.persistance pero session y sessionFactory bajo el paquete org.hibernate.Session / sessionFactory.

El administrador de entidades es específico de JPA y session / sessionFactory es específico de hibernación.




Related