Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro Hibernate e Postgres no Heroku

Depois de fazer o upload para o heroku meu projeto funciona normal para acessar as paginas que nao usem o banco de dados. Aqui um exemplo de quando ocorre erro

https://bitbankbm.herokuapp.com/url-magica-maluca-dsdhASDSDJJALDJIJEJ5618461646163484AJHAKHINSKFAHWid

Me parece que seja algo entre o hibernate e o postgres, mas nao sei dizer qual seja. Pegando o erro pelo navegador a primeira linha é essa

Mensagem: org.hibernate.exception.SQLGrammarException: could not execute statement

e pelo Heroku logs uma das linhas que me chama a atenção é essa

 Caused by: org.postgresql.util.PSQLException: ERROR: relation "conta" does not exist

Como nao tenho como postar todo meu codigo irei colocar os meus links do git

Pom https://github.com/BryanMotta/FormacaoJava/blob/master/pom.xml

Dao https://github.com/BryanMotta/FormacaoJava/blob/master/src/main/java/br/com/bitbank/dao/UsuarioDAO.java

Jpa https://github.com/BryanMotta/FormacaoJava/blob/master/src/main/java/br/com/bitbank/configuracao/JPAProductionConfiguration.java

AppWeb https://github.com/BryanMotta/FormacaoJava/blob/master/src/main/java/br/com/bitbank/configuracao/AppWebConfiguration.java

Caso precise de qualquer outra classe aqui esta a raiz do git https://github.com/BryanMotta/FormacaoJava/tree/master/src/main/java/br/com/bitbank

Esse é o log de erro pego pelo navegador https://github.com/BryanMotta/FormacaoJava/issues/1

Esse é o log de erro pego pelo Heroku logs https://github.com/BryanMotta/FormacaoJava/issues/2

Parece que o hibernate nem chaga a criar as tabelas, chequei a trocar o update por create em

props.setProperty("hibernate.hbm2ddl.auto", "create");
6 respostas

Olá Bryan!

Primeiramente gostaria de te parabenizar pela sua tela de erro, ficou demais!

Então, provavelmente o Heroku não está criando o banco de dados.

Vá na aba Resources e me diz se lá tem um tal de "Heroku Postgres - Attached as DATABASE - Hobby Dev - Free".

Caso tenha, clique nele e vá em Settings > Reset Database. Depois faça o deploy novamente da aplicação (importante para a geração das tabelas).

Caso não tenha, siga esse tutorial para criar:

https://devcenter.heroku.com/articles/getting-started-with-java#use-a-database

Espero que te ajude.

Aguardo seu retorno!

Tenta utilizar o dialect do Postgress:

org.hibernate.dialect.PostgreSQL82Dialect

Obrigado Guilherme hahaha. Ela ainda esta precisando de formatação, mas já transmite a mensagem. Eu fiz as verificações que me pediu e estão corretas, pode verificar nas fotos que vou deixar aqui em baixo.

https://drive.google.com/file/d/1SWpgLpa6ZuHSJjKwQrI_RJgWWKfwdgi5/view?usp=sharing https://drive.google.com/file/d/1h4XA2y6yq_oyGAv00MfeGxQvtauug_Ic/view?usp=sharing https://drive.google.com/file/d/1iEx7BqysfqS9AtDYo16SdN30hwO8E4wv/view?usp=sharing

Algumas outras verificações

PS D:\eclipse-workspace\bitbank> heroku info
=== bitbankbm
Addons:         heroku-postgresql:hobby-dev
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/bitbankbm.git
Owner:          bryanmotta7@gmail.com
Region:         us
Repo Size:      81 MB
Slug Size:      141 MB
Stack:          heroku-18
Web URL:        https://bitbankbm.herokuapp.com/
PS D:\eclipse-workspace\bitbank> heroku pg
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            11.5
Created:               2019-09-03 19:38 UTC
Data Size:             7.8 MB
Tables:                0
Rows:                  0/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-acute-35722

Eu cheguei a instalar o postgres aqui no meu pc agora para fazer uns testes, e como eu esperava, o projeto funciona normal. Porem eu tive que criar "database bitbank" primeiro para não ocorrer erro(igual se faz no mysql).

Caused by: org.postgresql.util.PSQLException: FATAL: database "bitbank" does not exist

Cheguei a pensar que seria preciso fazer isso também no heroku, mas como não foi preciso nos videos, descartei essa possibilidade. Então aparentemente só me resta ser alguma configuração que falte ser feita no heroku ou algo a mais que precise ser colocado no meu projeto.

Otávio, teste aqui com o que passou e mais dois

"org.hibernate.dialect.PostgreSQL82Dialect"
"org.hibernate.dialect.PostgreSQLDialect"
"org.hibernate.dialect.PostgreSQL9Dialect

e infelizmente não mudou.

solução!

Aeeeeeee consegui resolver! Depois de 3 dias consegui hahhah. E era uma coisa bem besta. Bem vamos lá, acabei de responder aqui no fórum e fui pesquisar outros "dialect" , dessa vez consegui achar a documentação. https://docs.jboss.org/hibernate/orm/current/javadocs/org/hibernate/dialect/package-summary.html

De lá peguei e coloquei no projeto

ProgressDialect

então fiz mais uma vez o deploy normal como vinha fazendo, e por incrível que pareça a conexão com o BD foi como deveria, sem erro algum.

Mas fiquei curioso do pq ter funcionado, troquei para todos os outro "dialect" inclusive os que citei que não tinam funcionado, e tudo roda sem problemas. Porem se resetar o banco de dados, o erro inicial volta, os únicos que não causam problemas no deploy inicial estão sendo

PostgreSQL95Dialect
ProgressDialect

Agora quero perguntar, qual dialect eu utilizo como padrão?

Eu também vou sugerir uma mudança para o curso, e ver se atualizam essa parte, se puder depois deem uma olhada lá.

Olá Bryan!

Confesso que nunca tinha visto esse ProgressDialect. Ao pesquisar sobre me parece que o Progress é um SGBD (assim como o Postgres):

https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/dialect/package-summary.html

Como você está utilizando o Heroku o recomendável é manter o dialeto do Postgres pois a plataforma te dá um suporte melhor na versão gratuita.

Então, posso dizer que eu coloquei ProgressDialect no projeto pela primeira vez sem querer. Como esta logo abaixo de PostgreSQLDialect acabei achando que era a mesma coisa e não li com atenção, depois que funcionou que fui olhar com calma e acabei fazendo outros testes e chegando no que citei.

Eu vou deixar como PostgreSQL95Dialect já que esta funcionando sem problemas.

Obrigado pela ajuda.