Как я могу получить объект сеанса, если у меня есть Entitymanager

StackOverflow https://stackoverflow.com/questions/4148231

Вопрос

у меня есть

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, вам придется использовать EntityManager#getDelegate(). Отказ Но имейте в виду, что Результатом этого метода является особой реализацией Т.е. не портативный с сервера приложений, используя Hibernate к другому. Например с jboss. Вы бы сделали:

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() Для новых приложений.

Так что с гибернатом как реализация JPA 2.0 (см. 3.15. Родная гибернация API.), вы сделаете:

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

Другие советы

Смотрите раздел "5.1. Доступ к Hibernate API от JPA" в Руководство пользователя Hibernate ORM:

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

Это объяснит лучше.

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

Я работал в светофор, но я использовал

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

и правильно было

org.hibernate.Session session = (Session) manager.getDelegate();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top