у меня есть
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Как я могу получить сеанс, если я использую entitymanager, или как я могу получить результат из моих независимых критериев?
java
hibernate
jpa
hibernate-entitymanager
storm_buster
источник
источник
((EntityManagerImpl)em).getSession();
Ответы:
Чтобы быть полностью исчерпывающим, все будет иначе, если вы используете реализацию JPA 1.0 или JPA 2.0.
JPA 1.0
С JPA 1.0 вам придется использовать
EntityManager#getDelegate()
. Но имейте в виду, что результат этого метода зависит от реализации, т.е. не переносится с сервера приложений, использующего Hibernate, на другой. Например, с JBoss вы бы сделали:Но с GlassFish вам придется:
Я согласен, это ужасно, и здесь виновата спецификация (недостаточно ясная).
JPA 2.0
В JPA 2.0 есть новый (и намного лучший)
EntityManager#unwrap(Class<T>)
метод, который предпочтительнееEntityManager#getDelegate()
для новых приложений.Итак, используя Hibernate как реализацию JPA 2.0 (см. 3.15. Native Hibernate API ), вы должны:
источник
entityManager.unwrap(Session.class);
чтоSession
внутриSession.class
? это импорт?org.eclipse.persistence.sessions.Session
См. Раздел « 5.1. Доступ к API Hibernate из JPA » в Руководстве пользователя Hibernate ORM :
источник
entityManager.unwrap(Session.class);
чтоSession
внутриSession.class
? это импорт?Это объяснит лучше.
источник
entityManager.unwrap (Session.class) используется для получения сеанса от EntityManager.
Ссылка на демонстрационное приложение .
источник
Я работал в Wildfly, но использовал
и правильным было
источник