Hibernate - erro ao salvar um objeto!

5 respostas
V

Pessoal to começando a estudar o hibernate com annotation e nao estou conseguindo salvar… seria algum .jar?

dá o seguinte erro…

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.MappingException: Unknown entity: classPersistence.Cliente

segue os códigos da aplicação.

a classe hibernateUtil:

public class HibernateUtil {  
	    private static final SessionFactory sessionFactory;  
	    static {  
	       sessionFactory = new AnnotationConfiguration().configure()  
	             .buildSessionFactory();  
	    }  
	   
	    public static SessionFactory getSessionFactory() {  
	       return sessionFactory;  
	    }  	   
}

segue a classe Cliente e está dentro do Pacote classPersistence

package classPersistence;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Entity;

@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	
	@Column(name = "nome_cliente",nullable = false, length = 60)
	private String nome;
	
	@Column(name = "idade",nullable = false, length = 5)
	private Integer idade;
	public Cliente(){
	}
	public Integer getId() {
	return id;
	}
	public void setId(Integer id) {
	this.id = id;
	}
	public Integer getIdade() {
	return idade;
	}
	public void setIdade(Integer idade) {
	this.idade = idade;
	}
	public String getNome() {
	return nome;
	}
	public void setNome(String nome) {
	this.nome = nome;
	}
}

a classe ClienteDao

import org.hibernate.Session;
import classHibernate.HibernateUtil;
import classPersistence.Cliente;

public class ClienteDao {
	private Session session;
	public ClienteDao(){
	}
	public void salvar(Cliente cli){
	session = HibernateUtil.getSessionFactory().getCurrentSession();
	session.beginTransaction();
	session.save(cli);
	session.getTransaction().commit();
	}
}

AnnotationConfiguration

<?xml version="1.0" encoding="utf-8" ?> 
  <!DOCTYPE hibernate-configuration (View Source for full doctype...)> 
- <hibernate-configuration>
- <session-factory>
- <!--  Database connection settings 
  --> 
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
  <property name="connection.url">jdbc:mysql://localhost/testeHibernate</property> 
  <property name="connection.username">root</property> 
  <property name="connection.password" /> 
- <!--  JDBC connection pool (use the built-in) 
  --> 
  <property name="connection.pool_size">1</property> 
- <!--  SQL dialect 
  --> 
  <property name="dialect">org.hibernate.dialect.HSQLDialect</property> 
  <property name="current_session_context_class">thread</property> 
- <!--  Disable the second-level cache 
  --> 
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
- <!--  Echo all executed SQL to stdout 
  --> 
  <property name="show_sql">true</property> 
  </session-factory>
  </hibernate-configuration>

5 Respostas

rubensdemelo

Tem que mapear a sua classe no hibernate.cfg.xml.

V

o arquivo de cima é o AnnotationConfiguration.xml, esse é criado automaticamente pelo hibernate? pois a diferença dele para o hibernate.cfg.xml é o mapeamento da classe…

o meu hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8" ?> 
  <!DOCTYPE hibernate-configuration (View Source for full doctype...)> 
- <hibernate-configuration>
- <session-factory>
- <!--  Database connection settings 
  --> 
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
  <property name="connection.url">jdbc:mysql://localhost:3306/testeHibernate</property> 
  <property name="connection.username">root</property> 
  <property name="connection.password" /> 
- <!--  JDBC connection pool (use the built-in) 
  --> 
  <property name="connection.pool_size">1</property> 
- <!--  SQL dialect 
  --> 
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
  <property name="current_session_context_class">thread</property> 
- <!--  Disable the second-level cache 
  --> 
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
- <!--  Echo all executed SQL to stdout 
  --> 
  <property name="show_sql">true</property> 
  <mapping class="classPersistence.Cliente" /> 
  </session-factory>
  </hibernate-configuration>
rubensdemelo

AnnotationConfiguration apenas indica que o mapeamento é feito nas classes com as @Annotations.

na parte: <mapping class="classPersistence.Cliente" />

É o caminho completo até a classe ? (Clica com o botão direito em cima dela, e seleciona “Copy Qualified Name”).

V

o nome está estranho mais é esse mesmo, pois como estou apenas tentando rodar a aplicação, criei apenas esse pacote classPersistence e dentro tem a classe Cliente, é preciso mapear as classes no AnnotationConfiguration ou deixa como estar?

rubensdemelo

Não precisa, ele pega as classes mapeadas no hibernate.cfg.xml.

Estranho isso hein… não sei o que pode ser . Normalmente este erro ocorre pq o hibernate não consegue idenficar uma classe, que você está tentando persistir.

Criado 19 de janeiro de 2010
Ultima resposta 19 de jan. de 2010
Respostas 5
Participantes 2