openSession
: Quando você liga SessionFactory.openSession
, ele sempre cria um novo Session
objeto e o entrega a você.
Você precisa liberar e fechar explicitamente esses objetos de sessão.
Como os objetos de sessão não são seguros para threads, é necessário criar um objeto de sessão por solicitação no ambiente multithread e uma sessão por solicitação também em aplicativos da web.
getCurrentSession
: Quando você ligar SessionFactory.getCurrentSession
, ele fornecerá o objeto de sessão que está no contexto de hibernação e gerenciado internamente por hibernação. Está vinculado ao escopo da transação.
Quando você liga SessionFactory.getCurrentSession
, ele cria um novo Session
se não existir; caso contrário, use a mesma sessão que está no contexto de hibernação atual. Ele libera e fecha automaticamente a sessão quando a transação termina, para que você não precise fazer isso externamente.
Se você estiver usando o hibernate no ambiente de thread único, poderá usá- getCurrentSession
lo, pois seu desempenho é mais rápido em comparação à criação de uma nova sessão a cada vez.
Você precisa adicionar a seguinte propriedade ao hibernate.cfg.xml para usar o getCurrentSession
método:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
ouclose()
. Ele só ligagetCurrentSession()
. Eu acho que ele definecurrent_session_context
parathread
. Agora acho que entendogetCurrentSession()
. No entanto, não sei quando devo usaropenSession()
.