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:
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!
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?
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.
@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, 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:
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.
@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.
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.
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!