Erro em busca no banco com hibernate

Pessoal estou com esse probleminha aqui no meu sistema, ele aparece o seguinte erro quando possui muitos resultados.

ERROR: HHH000319: Could not get database metadata
org.postgresql.util.PSQLException: FATAL: desculpe, muitos clientes conectados
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:398)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:173)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:136)
at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:29)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.(AbstractJdbc3gConnection.java:21)
at org.postgresql.jdbc4.AbstractJdbc4Connection.(AbstractJdbc4Connection.java:31)
at org.postgresql.jdbc4.Jdbc4Connection.(Jdbc4Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:393)
at org.postgresql.Driver.connect(Driver.java:267)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:190)
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)
at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)
at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:503)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
at Controle.HibernateUtil.getConexao(HibernateUtil.java:21)
at Controle.CandidatoDAO.BuscaAvancadaCanFA(CandidatoDAO.java:180)
at Visao.Busca.BuscaRefinada(Busca.java:90)
at Visao.Busca.BuscaAvancadaActionPerformed(Busca.java:418)
at Visao.Busca.access$300(Busca.java:28)
at Visao.Busca$5.actionPerformed(Busca.java:289)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Procurei na internet e em algumas postagens dizia que era por que eu nao estava fechando a sessao, mas no meu clientedao elas estão sendo fechadas.

Desde já agradeço pela ajuda de vocês

Muito obrigado

pelo jeito não esta fechando todas as sessoes nao, verifique seus daos, certifique-se que eles fecham as sessoes…

E não tem nenhum método passando por fora do DAO não? que poderia estar deixando a conexão aberta?

Tem não veja aqui como ta passando

[code]public List BuscaAvancadaCC(String CCConsulta) {

    HibernateUtil hu = new HibernateUtil();
    Session ss = hu.getConexao(new Candidato());
    Transaction transacao = ss.beginTransaction();

        Query listagem_query = ss.createQuery("FROM FormacaoAcademica WHERE to_ascii(upper(cursocomplementar),'LATIN1') like :cursocomplementar");
        listagem_query.setParameter("cursocomplementar", "%" + CCConsulta + "%");
        List<FormacaoAcademica> fa = listagem_query.list();
        ss.getTransaction().commit();
        ss.close();
        return fa;
}[/code]

e esse fa é passado para a interface onde ele so faz popular a tabela. O codigo segue abaixo.

if (cursoComplementarSele.isSelected()) { List<FormacaoAcademica> listaCC = cd.BuscaAvancadaCC(cursoComplementar); for (FormacaoAcademica fa : listaCC) { List<Candidato> listaCand = cd.BuscaAvancadaCanFA(fa.getId()); for (Candidato candidato : listaCand) { modelo.addRow(new Object[]{candidato.getId(), candidato.getPessoa().getDadosPessoais().getNome(), candidato.getPessoa().getContato().getTelefone1(), candidato.getPessoa().getDadosPessoais().getIdade(), candidato.getPessoa().getEndereco().getBairro(), fa.getEscolaridade(), fa.getCursosSuperiores()}); } } }

O que vocês acham que pode ser.

Acho que o erro está ai. ss.beginTransaction(), deve retornar uma nova transação.

Pois quando você realiza o commit, faz:

[quote]ss.getTransaction().commit();
ss.close(); [/quote]

Se o beginTransaction retornar um novo objeto e não armazenar no getTransaction, pode ser que esteja trabalhando com transações diferentes.

Além do mais, só há garantia de execução do close se utilizar o finally:

    HibernateUtil hu = new HibernateUtil();  
    Session ss = null;
    Transaction transacao = null;

    try {    
        ss = hu.getConexao(new Candidato());  
        transacao = ss.beginTransaction();  
  
        Query listagem_query = ss.createQuery("FROM FormacaoAcademica WHERE to_ascii(upper(cursocomplementar),'LATIN1') like :cursocomplementar");  
        listagem_query.setParameter("cursocomplementar", "%" + CCConsulta + "%");  
        List&lt;FormacaoAcademica&gt; fa = listagem_query.list();  
        transacao.commit();
    } catch(Exception ex) {
        transacao.rollback();
    } finally {
        ss.close();  
    }

    return fa;  

Olá Btafarelo

Tentei fazer isso que você me falou ai em cima só que continua dando o mesmo erro. Alguem mais sabe oq eu posso fazer?

Posta a configuração do hibernate/datasource

[quote]ERROR: HHH000319: Could not get database metadata
org.postgresql.util.PSQLException: FATAL: desculpe, muitos clientes conectados[/quote]

Conforme essas linhas, parece que a mensagem foi personalizada em um dos arquivos de configuração.

Pode ser que a quantidade de conexões foi alterada ou algum método anterior não está fechando as conexões.

<?xml version="1.0" encoding="UTF-8"?> org.hibernate.dialect.PostgreSQLDialect org.postgresql.Driver jdbc:postgresql://localhost:5432/BancoDeEmpregos postgres marcelo2207
<property name="hbm2ddl.auto">create</property> 
<property name="hbm2ddl.auto">update</property>

 <mapping class="Modelo.Candidato"/>
 <mapping class="Modelo.Pessoa"/>
 <mapping class="Modelo.DadosPessoais"/>
 <mapping class="Modelo.Endereco"/>
 <mapping class="Modelo.Experiencia"/>
 <mapping class="Modelo.Indicacao"/>
 <mapping class="Modelo.Contato"/>
 <mapping class="Modelo.CursosSuperiores"/>
 <mapping class="Modelo.FormacaoAcademica"/>
 <mapping class="Modelo.Referencia"/>

ai ta o arquivo de configuração do hibernate


Esse parametro irá fechar todas as conexões abertas sem uso, no intervalo especificado.

Isso pode resolver, mas deve haver conexões não encerradas em outros métodos. E isso deve estar causando o problema.

Há alguma conexão com o banco de dados antes desse seu método? Esses métodos anteriores funcionam?

Há também as propriedades 

[code]property name="hibernate.c3p0.max_size">100</property> 
    <property name="hibernate.c3p0.min_size">10</property> [/code]

Para definir o tamanho do pool, pode ser necessário aumentar.

Ou ainda o arquivo de configuração postgresql.conf que também possui o parametro max_connections

Esse parametro irá fechar todas as conexões abertas sem uso, no intervalo especificado.

Isso pode resolver, mas deve haver conexões não encerradas em outros métodos. E isso deve estar causando o problema.

Há alguma conexão com o banco de dados antes desse seu método? Esses métodos anteriores funcionam?

Há também as propriedades

property name="hibernate.c3p0.max_size">100</property> <property name="hibernate.c3p0.min_size">10</property>

Para definir o tamanho do pool, pode ser necessário aumentar.

Ou ainda o arquivo de configuração postgresql.conf que também possui o parametro max_connections

Adicionei essas linhas ao arquivo de configuração só que continua dando o mesmo erro :frowning:

Eai pessoal o que vocês acham ainda estou aqui empancado nesse erro afff :frowning:

Consegui pessoal graças a Deus.

é que eu organizei tudo aqui, e as conexões abertas também, por que ele estava abrindo uma conexão para cada usuario que era encontrado no banco ai depois de fazer isso, ficou tudo ok.

Agradeço também a todos aqueles que me ajudaram e aos que não ajudaram também

Obrigado :stuck_out_tongue: