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

Hibernate não conecta ao MySQL

Olá pessoal,

Estou trabalhando em um projeto para uma aplicação Java Web e quero usar hibernate na parte de persistência. Fiz os exemplos do curso para configurar a ferramenta e estes funcionaram bem (alguns problemas surgiram mas fui capaz de contorna-los pesquisando). Mas agora não estou conseguindo fazer a conexão do hibernate com o banco MySQL na minha aplicação, a principio fui lidando com algumas exceptions que surgiam com a experiencia que obtive nos exemplos do curso, mas agora não sei bem porque não está funcionado (sou iniciante nesta tecnologia e os logs não estão me dizendo muita coisa). Serei muito grato se alguém puder me dar uma sugestão do que possa ser o responsável por isso.

Pois bem, no momento em que a aplicação tenta se conectar ao banco (tela de login, validar e-mail e senha do usuário) recebo as exceptions abaixo:

https://gist.github.com/DLucasUnivasf/546a096e8d327a16ca12a79bd8ac84af O meu persistence.xml está da seguinte forma:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="PatentePI">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:3306//localhost/sgpatentes" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>

</persistence>

PS. Usuário e senha do banco estão corretos(depois vou tirar do root). Já me certifiquei que o banco está online e "escutando" na porta 3306(testei com Telnet), o serviço dele está ativo, consigo acessar via Workbench. Já consegui acessa-lo usando JDBC puro e também usando os exemplos deste curso. O schema existe e inclusive já tem tabelas com dados.

Alguém já se deparou com esse problema ou tem alguma sugestão ?

7 respostas

Oi Daniel, tudo bem?

Eu acho que o problema esta na url :(, acho que inverteu a ordem dos parâmetros.

Tente mudar para property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sgpatentes" />

Muito obrigado por sua resposta Caio,

De fato a URL está errada :-( ,mas o que aconteceu é que eu a estava alterando para testar uma solução que vi em um fórum pouco antes de postar esta duvida e acabei não a retornando para a forma correta.

No projeto estava usando a URL na exata forma como você sugeriu e o erro acontecia da mesma maneira, fiquei sem idéias do que mais verificar.

Bom dia, Daniel.

Bom dia, Caio.

Permitam-me contribuir com algumas observações sobre o log, [= ?

A sua stack trace está informando que a conexão não está sendo estabelecida pois não está encontrando o arquivo properties do Hibernate (geralmente o hibernate.cfg.xml):

2018-05-16 20:18:14,338 INFO [org.hibernate.cfg.Environment] HHH000206: hibernate.properties not found

Talvez este arquivo esteja faltando, esteja em lugar inadequado ou poderá ser alguma configuração no seu EntityManageProducer:

at br.edu.univasf.patentes.util.jpa.EntityManagerProducer.<init>(EntityManagerProducer.java:17)

[]'s.

Olá Bruno, obrigado por responder.

Eu já havia tentado pesquisar sobre o código desta mensagem (HHH000206).

Como está é uma mensagem "INFO " acreditei que ela não era diretamente responsável pelo problema, uma vez que existem exceptions disparadas quando o problema é a falta deste arquivo:

https://stackoverflow.com/questions/12677783/where-to-place-hibernate-cfg-xml/29352557#29352557

Em: https://stackoverflow.com/questions/19085816/how-to-fix-the-error-info-hhh000206-hibernate-properties-not-found

Umas das respostas afirma, de fato, que esta mensagem não deveria a principio, impedir a conexão. Entendi que este arquivo contém configurações do hibernate para configuração, as quais já estão contidas no persistence.xml .

Sobre o EntityManageProducer, esta é a linha que aparece na stacktrace: factory = Persistence.createEntityManagerFactory("PatentePI");

Daniel, voce esta usando algum servidor de aplicação? como Jboss?

Assumindo que seu banco esteja rodando, com usuario e senha root, seu projeto esta com o drive do mysql.

Tente usar esse xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0">

<persistence-unit name="PatentePI">

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <!--  SUAS ENTITY AQUI -->
    <class>br.com.caelum.financas.modelo.Conta</class>

    <properties>
        <!--  Propriedades JDBC  -->
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/sgpatentes"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="root"/>

        <!--  Configurações específicas do Hibernate  -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
    </properties>

</persistence-unit>

</persistence>

Caso ainda não obtenha sucesso, tente criar um outro database, e volte postar seu feedback aqui por favor.

Bom dia Daniel, alguma posição?

solução!

Olá Caio,

Peço desculpas por não ter dado um retorno mais rápido neste tópico. Estou na reta final da faculdade e fiquei tão atarefado nesta ultima semana que acabei tendo de pausar este projeto problemático.

Consegui resolver o problema graças a uma conhecidencia . Ontem comecei o curso de JPA aqui na Alura, este curso é meio antigo (2012).

No curso o instrutor pede para baixarmos um projeto já com o JPA e Hibernate configurados. Acontece que ao tentar executar o projeto em minha maquina me deparei com um erro justamente ao conectar com o banco de dados. Verificando no fórum da Alura percebi que vários usuários estavam enfrentando problemas semelhantes e que o culpado era a versão do .jar do conector, uma vez que a maioria , assim como eu, estava usando a ultima versão do MySQL 8.0.x enquanto o conector que já vinha no projeto era bem mais antigo.

Isso me fez pensar que no meu projeto, em que eu tomei como base outro projeto (que fui verificar tinha sido feito em 2013, ;-) ) eu tinha colocado para o Maven instalar também uma versão antiga no conector, 5.1.25 (acho que tava meio no piloto automático nesse momento rsrs)... Porém ao tentar usar as ultimas versões do conector e hibernate core acabei recebendo muitas novas exceções que até desanimei de ir atrás, então resolvi mudar o servidor do banco, retornado para alguma versão 5.X.

Limpei a maquina de instalações anteriores e instalei o MySQL 5.7.22 , a principio não deu certo, continuei recebendo exceções na hora de conectar ao banco só que algora elas eram muito mais assertivas sobre o que seria o problema, descobri que o banco não estava "escutando" naquela porta padrão 3306 e concertei isso. Depois disso finalmente funcionou!

Embora ainda tenha ficado com uma certa frustração em relação a todas essas tecnologias, com alguém que está começando agora, que é o fato que a partir do log original que publiquei aqui, mesmo de pois de pesquisar bastante não encontrei nenhuma resposta que suspeitasse desta possibilidade, se não fosse o insight indireto do curso de jsf ainda estaria enganchado nisso.

Enfim, resolvido. Muito abrigado por sua ajuda!