Problema no hibernate.cfg.xml

10 respostas
ccefetpb

Estou tentando usar o hibernate pra gerar as tabelas apartir das minhas classes porem quando starto o main fica dando o mesmo erro como se o hibernate não encontrasse o arquivo de configuração . Ja tentei mudar o arquivo de posicao , fiz testes e cheguei nesse resultado.

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

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/teste</property> 
		<!--<property name="hibernate.connection.url">jdbc:postgresql://localhost/teste</property> -->
		
		<property name="hibernate.connection.driver.class">com.mysql.jdbc.Driver</property> 
		<!-- <property name="hibernate.connection.driver.class">org.postgresql.Driver.</property> -->
		
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
		<!-- <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> -->
		
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">12345</property>
		
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<property name="hibernate.c3p0.min_size">5</property>
		<property name="hibernate.c3p0.max_size">20</property>
		<property name="hibernate.c3p0.timeout">180</property>
		<property name="hibernate.c3p0.idle_test_period">100</property>
		
		<property name="hibernate.cache.provider_class">org.hibernate.cache.EnCacheProvider</property>
		
		<mapping class="entidades.Aluno" />
		<mapping class="entidades.Curso" />
		<mapping class="entidades.Matricula" />
		
	</session-factory>
</hibernate-configuration>
package exec;                                                                 
                                                                              
import java.io.File;                                                          
                                                                              
import org.hibernate.cfg.AnnotationConfiguration;                             
import org.hibernate.tool.hbm2ddl.SchemaExport;                               
                                                                              
public class GeraBanco {                                                      
                                                                              
	public static void main(String[] args) {                                  
		//coloquei essa linha pra verificar se o arquivo esta sendo encontrado
		System.out.println(new File("hibernate.cfg.xml").exists());           
		                                                                      
		AnnotationConfiguration configuration = new AnnotationConfiguration();
		SchemaExport se = new SchemaExport(configuration);                    
		se.create(true, true);                                                
	}                                                                         
                                                                              
}

E essa é a saida no console :

true
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.HibernateException: The dialect was not set. Set the property hibernate.dialect.
	at org.hibernate.dialect.Dialect.instantiateDialect(Dialect.java:256)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:234)
	at org.hibernate.dialect.Dialect.getDialect(Dialect.java:249)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:121)
	at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
	at exec.GeraBanco.main(GeraBanco.java:15)

Essa é uma das minhas classes :

package entidades;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Aluno {
	@Id
	@GeneratedValue
	private int id;
	private String nome;
	private int idade;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getIdade() {
		return idade;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}
	
	
}

O hibernate.cfg.xml esta na raiz do projeto , e eu baixei todas as libs do site do hibernate !

Alguem pode me dizer o que está errado :frowning: .

Desde ja grato .

10 Respostas

Java_Boy

Uns palpites, joga a parte do dialeto antes da hibernate.connection.driver.class, ou senão tira o ‘hibernate.’

Pedrosa

A mensagem de erro é do Dialeto, veja se esta corretamente no arquivo pegue um exemplo da net que funciome com MYSQL, que eu acho que é o que vc esta usando.

ccefetpb

Primeiro de tudo : Obrigado por responder .
Bem , tentei colocar o dialect antes mas não funcionou :frowning: .
E , esse exemplo ja é um que encontrei na internet , fiz da mesma forma ( só não copiei e colei pois me dei o trabalho de digitar , embora depois tenha copiado e colado :stuck_out_tongue: ) .
Ta igualzinho .
Ja tentei trocar o cfg.xml por um .propeties e tbm não funcionou .

Segue a hieraquia do meu projeto :

>HibernateTeste
   >src
      >entidades
          >aluno.java
          >curso.java
          >matricula.java
      >exec
          >GeraBanco.java
   >libs_hibernate
   >hibernate.cfg.xml
Java_Boy

E se voce setar na mao?

é um paliativo apenas, mas tenta. Também tenta trocar o dialeto.

ccefetpb

Dessa vez não deu erro mas tbm não aconteceu nada . Eu coloquei no main :

import java.io.File;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraBanco {

	public static void main(String[] args) {
		
		AnnotationConfiguration configuration = new AnnotationConfiguration();
		configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");  
		configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/teste");  
		configuration.setProperty("hibernate.connection.driver.class", "com.mysql.jdbc.Driver");  
		configuration.setProperty("hibernate.connection.username", "root");  
		configuration.setProperty("hibernate.connection.password", "12345");  
		configuration.setProperty("hibernate.show_sql", "true"); 
		configuration.setProperty("hibernate.hbm2ddl.auto", "update");  
		configuration.setProperty("hibernate.c3p0.min_size", "5");  
		configuration.setProperty("hibernate.c3p0.max_size", "20");  
		configuration.setProperty("hibernate.c3p0.timeout", "180");  
		configuration.setProperty("hibernate.c3p0.idle_test_period", "100");  
		configuration.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EnCacheProvider");  

		configuration.addAnnotatedClass(entidades.Aluno.class);
		configuration.addAnnotatedClass(entidades.Curso.class);
		configuration.addAnnotatedClass(entidades.Matricula.class);
		
		SchemaExport se = new SchemaExport(configuration);
		se.create(true, true);
	}

}

E a saida foi :

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

Entretando não aconteceu nada no banco.

Java_Boy

Sinistro! rs

Dá um

ou um

configuration.configure().buildSettings()

Em algum lugar ele tem que chiar

ccefetpb

:frowning:
Agora que eu não sei mas o que acontece !
:frowning:
Bem quando coloquei apenas :

configuration.configure().buildSettings();
		configuration.configure().buildMapping();
		configuration.configure().buildMappings();

Qualquer uma dessas linhas , ele reclama da mesma coisa :

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
true
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
	at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
	at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1453)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1475)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:64)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1011)
	at exec.GeraBanco.main(GeraBanco.java:37)

Então num ato de mazoquismo eu coloquei isso

File f = new File("hibernate.cfg.xml");
		System.out.println(f.exists());
		
		configuration.configure(f).buildMapping();

E ele parou de reclamar do arquivo :slight_smile:
Mas a saida foi :

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
true

E o banco continuou na mesma , sem nada.

Ai eu coloquei :

package exec;

import java.io.File;


import org.hibernate.cache.EhCacheProvider;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraBanco {

	public static void main(String[] args) {
		
		AnnotationConfiguration configuration = new AnnotationConfiguration();
		configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");  
		configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/teste");  
		configuration.setProperty("hibernate.connection.driver.class", "com.mysql.jdbc.Driver");  
		configuration.setProperty("hibernate.connection.username", "root");  
		configuration.setProperty("hibernate.connection.password", "12345");  
		configuration.setProperty("hibernate.show_sql", "true"); 
		configuration.setProperty("hibernate.hbm2ddl.auto", "update");  
		configuration.setProperty("hibernate.c3p0.min_size", "5");  
		configuration.setProperty("hibernate.c3p0.max_size", "20");  
		configuration.setProperty("hibernate.c3p0.timeout", "180");  
		configuration.setProperty("hibernate.c3p0.idle_test_period", "100");  
		configuration.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EnCacheProvider");  

		configuration.addAnnotatedClass(entidades.Aluno.class);
		configuration.addAnnotatedClass(entidades.Curso.class);
		configuration.addAnnotatedClass(entidades.Matricula.class);
		

		
		File f = new File("hibernate.cfg.xml");
		System.out.println(f.exists());
		
		configuration.configure(f).buildSettings();
		
		SchemaExport se = new SchemaExport(configuration);
		se.create(true, true);
	}

}

E qual nãofoi minha surpresa ao ver uma saida diferente :

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
true
Exception in thread "main" org.hibernate.HibernateException: could not instantiate RegionFactory [org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge]
	at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:389)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:262)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2111)
	at exec.GeraBanco.main(GeraBanco.java:37)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:384)
	... 4 more
Caused by: org.hibernate.cache.CacheException: could not instantiate CacheProvider [org.hibernate.cache.EnCacheProvider]
	at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.<init>(RegionFactoryCacheProviderBridge.java:66)
	... 9 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.EnCacheProvider
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
	at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.<init>(RegionFactoryCacheProviderBridge.java:63)
	... 9 more

O problema e que esse classe que ele ta reclamando ta nos *.jars do projeto .:frowning:

Alguem pode me ajudar?

Java_Boy

Rapaz, mas que zica hein.

Deu uma chegada no site do hibernate e vius os jars e os exemplos?

ccefetpb

:slight_smile:

Valeu cara , depois de muito penar ! Eu consegui , recomecei o projeto baixei os jars de novo e fui colocando lentamente no projeto ate funcionar .
Peço desculpas mas aparentemente era algum problema nos jars ( talvez algum duplicado , ou a falta de algum ) . Muito obrigado pela ajuda , valeu ai A.L.
Pra quem tiver duvidas a lista de jars esta abaixo , pra falar a verdade se eu tivesse achado essa lista teria sido de grande ajuda , então deixo ai pra se alguem um dia tiver o mesmo problema , lembrando que nem todos são realmente necessários :

ant-1.6.5.jar
ant-antlr-1.6.5.jar
ant-junit-1.6.5.jar
ant-launcher-1.6.5.jar
ant-swing-1.6.5.jar
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
c3p0-0.9.0.jar
cglib-2.1.3.jar
checkstyle-all.jar
cleanimports.jar
commons-beanutils-1.7.0.jar
commons-collections-2.1.1.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-logging-1.0.4.jar
commons-logging-1.1.jar
concurrent-1.3.2.jar
connector.jar
dom4j-1.6.1.jar
ehcache-1.2.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate3.jar
jaas.jar
jacc-1_0-fr.jar
javassist.jar
jaxen-1.1-beta-7.jar
jboss-cache.jar
jboss-common.jar
jboss-jmx.jar
jboss-system.jar
jdbc2_0-stdext.jar
jgroups-2.2.8.jar
jsf-api-1.2.jar
jsf-impl-1.2.jar
jstl-1.2.jar
jta.jar
junit-3.8.1.jar
log4j-1.2.11.jar
lucene-core-2.0.0.jar
mysql-connector-java-3.1.11-bin.jar
oscache-2.1.jar
proxool-0.8.3.jar
richfaces-api-3.1.0-rc3.jar
richfaces-impl-3.1.0-rc3.jar
richfaces-ui-3.1.0-rc3.jar
swarmcache-1.0rc2.jar
syndiag2.jar
versioncheck.jar
xerces-2.6.2.jar
xml-apis.jar

Outra coisa que estava errada é que realmente estava faltando a linha que vc falou A.L .Segue como ficou o main :

public class HibernateUtil {
	private static AnnotationConfiguration configuration;
	
	
	public static AnnotationConfiguration getConfiguration() {
		if ( configuration == null )
			configuration = new AnnotationConfiguration();
		configuration.configure();
		return configuration;
	}

	public void buildDatabase() {
		Configuration configuration = getConfiguration();
		SchemaExport se = new SchemaExport(configuration);
		se.create(true, true);
	}
}

Bem , é isso , novamente muito obrigado pela ajuda

Java_Boy

ccefetpb,

que bom que conseguiu e mostrou a solução, fico feliz em ter ajudado

abs, boas festas!

Criado 29 de dezembro de 2009
Ultima resposta 30 de dez. de 2009
Respostas 10
Participantes 3