eu tenho
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Como posso recuperar a sessão se estou usando o entitymanager ou como posso obter o resultado de meus critérios separados?
java
hibernate
jpa
hibernate-entitymanager
storm_buster
fonte
fonte
((EntityManagerImpl)em).getSession();
Respostas:
Para ser totalmente exaustivo, as coisas são diferentes se você estiver usando uma implementação JPA 1.0 ou JPA 2.0.
JPA 1.0
Com JPA 1.0, você teria que usar
EntityManager#getDelegate()
. Mas tenha em mente que o resultado desse método é específico da implementação, ou seja, não é portátil de um servidor de aplicação usando Hibernate para outro. Por exemplo, com o JBoss você faria:Mas com GlassFish , você teria que fazer:
Eu concordo, isso é horrível, e a especificação é a culpada aqui (não é clara o suficiente).
JPA 2.0
Com o JPA 2.0, há um
EntityManager#unwrap(Class<T>)
método novo (e muito melhor) que deve ser preferidoEntityManager#getDelegate()
para novos aplicativos.Portanto, com o Hibernate como implementação JPA 2.0 (consulte 3.15. API Nativa do Hibernate ), você faria:
fonte
entityManager.unwrap(Session.class);
o que estáSession
dentroSession.class
? é uma importação?org.eclipse.persistence.sessions.Session
Veja a seção " 5.1. Acessando Hibernate APIs de JPA " no Hibernate ORM User Guide :
fonte
entityManager.unwrap(Session.class);
o que estáSession
dentroSession.class
? é uma importação?Isso vai explicar melhor.
fonte
'entityManager.unwrap (Session.class)' é usado para obter a sessão do EntityManager.
Link do aplicativo de demonstração .
fonte
Eu estava trabalhando no Wildfly, mas estava usando
e o correto era
fonte