IT

entitymanager가 어디에 있습니까?

lottoking 2020. 8. 20. 19:05
반응형

entitymanager가 어디에 있습니까?


나는 가지고있다

private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria( ??? ).list();
}

entitymanager를 사용하는 경우 세션을 검색하거나 분리 한 기준에서 결과를 어떻게 얻을 수 있습니까?


철저히 완전히 정리 된 JPA 1.0 또는 JPA 2.0 구현을 사용하는 경우 상황이.

JPA 1.0

JPA 1.0에서는 . 그러나이 방법의 결과는 구현에 따라 달라집니다. 즉, Hibernate를 사용하는 응용 프로그램 서버에서 다른 서버로 이식 할 수 없습니다. 예를 들어 JBoss에서는 다음을 수행합니다.EntityManager#getDelegate()

org.hibernate.Session session = (Session) manager.getDelegate();

그러나 GlassFish 를 사용하면 다음을 수행해야합니다.

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession(); 

나는 끔찍한 일이라는 데 동의하며 사양하며 여기에서 비난받는 것입니다.

JPA 2.0

JPA 2.0은 새로운 응용 프로그램 보다 선호 되는 새롭고 훨씬 더 나은 방법이 있습니다 .EntityManager#unwrap(Class<T>)EntityManager#getDelegate()

따라서 Hibernate를 JPA 2.0 구현으로 사용하면 ( 3.15. Native Hibernate API 참조) 다음을 수행합니다.

Session session = entityManager.unwrap(Session.class);

Hibernate ORM User Guide의 " 5.1. JPA에서 Hibernate API에 접근하기 " 섹션을 참조하십시오 .

Session session = entityManager.unwrap(Session.class);

이것은 더 잘 설명 될 것입니다.

EntityManager em = new JPAUtil().getEntityManager();
Session session = em.unwrap(Session.class);
Criteria c = session.createCriteria(Name.class);

저는 Wildfly에서 일하고 있었지만

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();

그리고 정답은

org.hibernate.Session session = (Session) manager.getDelegate();

참고 URL : https://stackoverflow.com/questions/4148231/how-can-i-get-the-session-object-if-i-have-the-entitymanager

반응형