Uma dúvida. No meu projeto utilizo jpa, por isso trabalho com EntityManager. Mas algumas vezes preciso usar Criteria, então retiro a Session usando o método getDelegate() da EntityManager.
No final da minha chamada da Action (estou usando Struts), preciso fechar minha sessão pois utilizo uma só para todas as consultas. Percebi que se fecho a EntityManager, a Session extraída continua aberta e ativa. Se fecho a Session, a EntityManager é fechada, porém se usar o método isOpen() me retorna true, mas se tento utilizá-la em alguma query, o sistema me alerta dizendo que a EntityManager está fechada. Acredito que seja um bug do framework, que só considera isOpen() = false se o método close() for usado direto na EntityManager e não na Session extraída.
Usei o Hibernate Statistics pra ver quantas sessões foram abertas e fechadas e percebi que todas são fechadas se utilizo o close() direto na Session. Se uso close() na EntityManager algumas sessões ficam abertas, pois como já disse, em alguns momentos utilizo o getDelegate().
jakefrog, estou usando Criteria do Hibernate mesmo.
drsmachado, não posso fechar as duas ao mesmo tempo, pois ao fechar a Session, parece que a EntityManager é fechada tb, pois se eu usar o close() ou tentar utilizá-la é gerada uma exception informando que a sessão já foi fechada.
Só estou com a pulga atrás da orelha porque percebi que apesar da EntityManager ser fechada quando dou um close() na Session, e isso ser confirmado pelo Hibernate Statistics, o método isOpen() retorna true. Estou acreditando que isso é um bug mesmo. O método isOpen() só retorna false se eu der um close() direto na EntityManager , mas nesse caso a Session fica aberta.
Só gostaria de ter certeza que ao fechar a Session, a EntityManager é fechada tb.