Gostaria de executar esta query com hibernate: “SELECT COUNT(schemaname) FROM pg_tables WHERE schemaname = ‘public’;” e pegar o seu retorno.
Esta query iria ficar dentro de uma classe e eu estou usando PostgreSQL com Hibnernate.
Executando uma query e pegando o retorno com hibernate
10 Respostas
Porque você não usa simplesmente SQL Query?
Estou usando a SQL Query, mas não estou sabendo pegar os dados retornados da query…
Você já deu uma olhada lá no link que passei? Quando você faz uma consulta explícita, sem recuperar um objeto persistente a ser gerenciado pelo Hibernate, ele executa a sua consulta e recupera, no seu caso, um object. Mas você está processando uma consulta escalar, então precisa especificar qual tipo irá usar(se não vai acabar trazendo um BigDecimal, se não me falhe a memória 8) ) Acredito que isso resolva:
session.createSQLQuery("SELECT COUNT(schemaname) contador FROM pg_tables WHERE schemaname = 'public' ")
.addScalar("contador", Hibernate.LONG);
Long qtde = (Long) session.uniqueResult();
Você não precisa de uma classe mapeada pra executar essa consulta, testa ai e vê se é o que precisa 
Se não me engano o resultado é um BigInteger e não um long, se for o caso é só mudar o cast e o tipo do objeto.
Valeu galera consegui resolver como o legionarioba falou… só troquei de Long para Integer…
Aproveitando, tem como criar e mapear um classe dinâmicamente?
Pq eu tenho várias tabelas que são criadas mensalmente…Tem como resolver isso com hibernate?
Não retorna um Long não como eu disse, pra isso o addScalar 
Tabelas criadas mensalmente? Xii tá com cara de furo, explica melhor porque você precisa disso…
Existe a classe SchemaExport, que recebe um Configuration(aquele mesmo do seu HibernateUtil). Mas isso é usado pra, por exemplo, se você quiser criar um programinha desktop, e deixar o cliente escolher qual banco quer utilizar(vais precisar claro das configs e acessos do banco). Essa situação sua não vejo muito sentido…
Nós fazemos isso aqui na empresa para não ficar com uma tabela com muitos registro e para poder medir a quantidade de registros de um mês com mais tranquilidade, na maioria das vezes em um 1 mês, no mínimo, é criado 50 milhões de registros…
E também no meu sistema tem a possibilidade do usuário criar schemas e dentro destes schemas teriam estas tabelas mensais…
Explica melhor essa arquitetura…O processo de criação da session factory é bastante custoso, mas como o mesmo é thread-safe no caso da web você cria chamando o HibernateUtil num listener do contexto, mas no seu caso, com usuários distintos com schemas distintos, isso pode ser deveras custoso. Desculpe perguntar, mas que tipo de negócio trabalha para gerar 50 milhões de registros em uma única tabela em um mês :shock:
Aqui nós trabalhamos com sms, wap, tudo relacionado a mobile…
Um exemplo no último paradão do BBB8 foi gerado em uma noite 1 milhão de registro.
E este meu sistema não vai rodar na web.