Erro: Could not parse configuration: hibernate.cfg.xml

12 respostas
geovane.santos

Pessoal,

Estou desenvolvendo uma aplicação Java Web utilizando o Hibernate para persistir os dados no MySQL. No momento de realizar o teste da conexão com o hibernate pela class main, é exibido o seguinte erro no console:

Arquivo hibernate.cfg.xml

?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="br.com.geovane.controle.Pessoa" />
        <mapping class="br.com.geovane.controle.PF" />
        <mapping class="br.com.geovane.controle.PJ" />

        <mapping class="br.com.geovane.controle.DocReceita" />
        <mapping class="br.com.geovane.controle.CPF" />
        <mapping class="br.com.geovane.controle.CNPJ" />

        <mapping class="br.com.geovane.controle.Telefone" />
        <mapping class="br.com.geovane.controle.Endereco" />

        <mapping class="br.com.geovane.controle.Animal" />
        <mapping class="br.com.geovane.controle.Cachorro" />
        <mapping class="br.com.geovane.controle.Gato" />

        <mapping class="br.com.geovane.controle.Servico" />
        <mapping class="br.com.geovane.controle.Banho" />
        <mapping class="br.com.geovane.controle.Consulta" />
        <mapping class="br.com.geovane.controle.Tosa" />
        <mapping class="br.com.geovane.controle.Vacina" />


        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/estimacao</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>

        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.pool_size">10</property>
        <property name="hibernate.hbm2dll.auto">create</property>

    </session-factory>
</hibernate-configuration>

Classe ConexaoHibernate.java

static {
        try {
            sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
    } catch (Throwable e) {
        System.err.println("\n\n\n ----------- Erro na fábrica de sessões Hibernate ---------------- \n\n\n");
        e.printStackTrace();
        System.err.println("\n\n\n ----------- Fim dos erros na fábrica de sessões Hibernate ------- \n\n\n");
        throw new ExceptionInInitializerError(e);
    }

}

//Retorna uma sessão de comunicação com o Banco de Dados
public static Session getInstance() {
    Session session = (Session) threadLocal.get();
    session = sessionFactory.openSession();
    threadLocal.set(session);
    return session;
}

Chamada na classe principal:

public static void main(String[] args) {
    GerarTabelas();
}

private static void GerarTabelas() {
    AnnotationConfiguration cfg = new AnnotationConfiguration();

    cfg.configure("hibernate.cfg.xml");
    SchemaExport sx = new SchemaExport(cfg);
    sx.create(true, true);
}

Pesquisei sobre esse problema, no entanto não consegui resolver. Se puderem ajudar, ficarei grato!

12 Respostas

darlan_machado

Posta o arquivo hibernate,cfg.xml inteiro.

Murilo_Medeiros

Utilize

jdbc:mysql://localhost/estimacao

Observe o username e password, parecem estar errados, geralmente utilizamos o mesmo nome da database no username

darlan_machado

Estou tentando entender qual a ligação entre a configuração de conexão com o erro de não ter sido possível ler o arquivo xml.

Murilo_Medeiros

Estou tentando entender onde voce viu ele falando que o erro foi de leitura do arquivo…
Mas se o erro for de leitura aqui vai a pergunta, voce está utilizando Maven? Observou se o arquivo xml se encontra na pasta META-INF?

darlan_machado

No título do tópico, bem claro, escrito: could not parse configuration. hibernate.cfg.xml

Nesta minha parca experiência em programação, eu entendo que could not parse se refere à impossibilidade de concluir a “leitura” de um arquivo por alguma razão.
Como ele postou só parte do arquivo cfg.xml, não tem como verificar, de maneira mais adequada, o que pode ter ocorrido (esqueceu alguma tag, esqueceu de fechar alguma tag, esqueceu alguma declaração de namespace, etc).
E, sobre tua sugestão, a declaração do host está correta, basta prestar atenção a isso

Além do que, erros referentes a conexão seriam exibidos como SQLException e não como HibernateException, como é o caso.

geovane.santos

@darlan_machado editei o arquivo cfg.xml, coloquei completo agora, se tiver mais algumas considerações a fazer, ficarei grato.
Olhei as tags a princípio tudo certo.

darlan_machado

Cara, já consegui identificar o erro.
Você precisa trocar essa parte

<!DOCTYPE hibernate-configuration PUBLIC 
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

Por essa

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

Na verdade, é devido a segunda parte, ao invés de www.hibernate.org, você precisa ter o hibernate.sourceforge.net

Tenta aí e avisa.

geovane.santos

@darlan_machado, fiz a alteração, no entanto o erro persistiu.
A fim de diminuir o tamanho do erro no console, comentei o restante do código e mantive apenas a codificação mínima no método GerarTabelas:

public static void main(String[] args) {
    GerarTabelas();
}

private static void GerarTabelas() {
    AnnotationConfiguration cfg = new AnnotationConfiguration();
    //cfg.configure("hibernate.cfg.xml");
    //SchemaExport sx = new SchemaExport(cfg);
    //sx.create(true, true);
}

Na execução do arquivo, o seguinte erro é exibido no console do IDE:

jul 19, 2018 3:50:16 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager 
<clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
jul 19, 2018 3:50:16 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.1.Final}
jul 19, 2018 3:50:16 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
jul 19, 2018 3:50:16 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist

Mesmo com a redução do log de erro não consegui identificar o problema.

darlan_machado

Opa, perai.
Agora o erro é diferente.

Este erro ocorre quando você tenta criar uma instância de objeto da classe Configuration, da seguinte maneira

Configuration cfg = new Configuration(); //Tenta buscar o arquivo hibernate.properties.

Se você quer que ele busque pelo hibernate.cfg.xml, você precisa instanciar da seguinte maneira:

Configuration cfg = new Configuration().configure(); //Tenta buscar o arquivo hibernate.cfg.xml

Particularmente, eu acho desnecessário utilizar o hibernate.cfg.xml, principalmente se você está utilizando mapeamento através de anotações nas entidades.

geovane.santos

@darlan_machado qual recurso você utiliza ao invés do hibernate.cfg.xml em casos que é utilizado mapeamento através de anotações nas entidades? Se possível me envie um exemplo, estou iniciando agora em Java Web.

darlan_machado

Eu utilizo o mapeamento via hibernate.properties.
Eu “aprendi” hibernate com configuração total por xml, como eu odeio XML com todas as minhas forças, sempre busquei alternativas.
Quando descobri que poderia usar o mapeamento em arquivo de properties, comecei a estudar e a usar.
A meu ver é muito mais tranquilo e produtivo.
Mas essa é a minha opinião.

geovane.santos

Achei o problema, como eu estou desenvolvendo um sistema novo estou me baseando em um sistema pré-existente, e não atentei quanto a versão do Hibernate que estava importado no projeto. Estava utilizando uma versão do Hibernate muito mais atualizada do que a do sistema pré-existente, alguns métodos estão como deprecated no novo Hibernate.
Solução: Removi a versão atualizada do meu projeto e importei uma versão anterior do hibernate, incrivelmente tudo está funcionando perfeitamente.
Obrigado colegas pela ajuda!

Criado 18 de julho de 2018
Ultima resposta 23 de jul. de 2018
Respostas 12
Participantes 3