Pq o maldito Hibernate não fecha a conexão?

Dia! :stuck_out_tongue:
Eu tenho uma aplicação rodando com Hibernate, mas de alguma maneira, ele está estourando o limite de conexões que o MySQL aceita.
O meu método é o seguinte:

public List getList(String hql) throws Exception{ Session session = factory.openSession(); List messages = session.find(hql); session.flush(); session.close(); return messages; }

Se eu dou um session.close(); pq a conexão continua aberta???
Eu fico analisando pelo Console do MySQL, cada vez q eu executo o método ele aumenta uma conexao… até q ele dá o erro: “Too many connection” :?
Existe alguma maneira melhor de se fazer isso???
Como posso resolver esse problema???

Valeuuuu! :mrgreen:

Será que vc não está se esquecendo de dar um closeSession em outro lugar?

:roll:

Será que não ocorre uma excessão antes de fechar a sessão ?

Não! :x

Acompanhei o console e nada de exceptions.

Eu dei uma lida na documentação ele fala que o Session.close() apenas retorna a conexão para o Pool… tudo bem… mas como eu mato ela no maldito pool??? :evil:

Já tive esse mesmo problema quando trabalhava com o Hibernate sob várias transações… então no meu controle de transações, ao finalizar eu usei…

if (session.isOpen()) {
    session.connection().close();
    session.close();
}

Assim você garante que a conexão com o bd será fechada.

[quote=le-silva]Já tive esse mesmo problema quando trabalhava com o Hibernate sob várias transações… então no meu controle de transações, ao finalizar eu usei…

if (session.isOpen()) {
    session.connection().close();
    session.close();
}

Assim você garante que a conexão com o bd será fechada.[/quote]

Valeu “le-silva”, agora funcionou bonitao! :mrgreen:
Eu nem usei o seu metodo inteiro, eu só adicionei “session.connection().close();” e rolou!
Thanx! :stuck_out_tongue:

Não use um connection pool se você não quer que a conexão possa continuar aberta depois de terminarem de usá-la.

Outro detalhe, qual o status as conexoes estao ficando depois de dar um session.close() ?
Bancos como o Postgre e Oracle nao fecham as conexoes de cara, elas ficam inativas e de tempos em tempos o banco elimina elas.

Outra coisa, eu particularmente nao gosto de deixar o controle da session para o DAO. Isso pode te trazer problemas se precisar usar Lazy no Hibernate.

]['s