[Hibernate] org.hibernate.MappingException

8 respostas
W

Boa tarde galera, Rodei bastante na net e não consegui achar
a resposta pra resolver esse probleminha !

Vou colocar os fontes …

Main.java

package exec;
import Entidade.Aluno;
import conf.HibernateUtil;
import org.hibernate.Session;


public class Main {

    public static void main(String[] args) {

        Aluno a = new Aluno (1, "Bruno", 22);
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        session.save(a);
        session.getTransaction().commit();
        System.out.println(a.toString());

    }

}

Aluno.java

package Entidade;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table (name="Aluno")
public class Aluno implements Serializable {

    @Id
    private int Id;
    @Column (nullable=false, length=200)
    private String nome;
    @Column (nullable=false, length=10)
    private int Idade;

    public Aluno() {}

    public Aluno(int Id, String nome, int Idade) {
        this.Id = Id;
        this.nome = nome;
        this.Idade = Idade;
    }

    /**
     * @return the Id
     */
    //@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
    public int getId() {
        return Id;
    }

    /**
     * @param Id the Id to set
     */
    public void setId(int Id) {
        this.Id = Id;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the Idade
     */
    public int getIdade() {
        return Idade;
    }

    /**
     * @param Idade the Idade to set
     */
    public void setIdade(int Idade) {
        this.Idade = Idade;
    }

    @Override
    public String toString() {
        return "Meu nome é " + getNome() + " tenho " + getIdade() + " anos.";
    }



}

HibernateUtil.java

package conf;

import org.hibernate.*;
import org.hibernate.cfg.*;


public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession()
            throws HibernateException {
        return sessionFactory.openSession();
    }
    
}

hibernate.cfg.xml

<?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.dialect">org.hibernate.dialect.DerbyDialect</property>
    <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
    <property name="hibernate.connection.url">jdbc:derby://localhost:1527/sample</property>
    <property name="hibernate.connection.username">app</property>
    <property name="hibernate.connection.password">app</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
  </session-factory>
</hibernate-configuration>

Erro

run:
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: Entidade.Aluno
        at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)
        at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
        at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
        at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
        at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
        at exec.Main.main(Main.java:14)
Java Result: 1

O erro do log4j eu sei que não interfere no funcionamento porem se algum conseguir me explicar eu agradeço !

Obrigado desde já !

8 Respostas

T

no hibernate.cfg.xml vc precisa do seguinte código

<mapping class="seupackage.SuaClasse"/>

logo após as tags de property

W

Thiago Domingues:
no hibernate.cfg.xml vc precisa do seguinte código

<mapping class="seupackage.SuaClasse"/>

logo após as tags de property


Eu ja tinha colocado isso e não funcionou,
porem coloquei novamente, e deu o mesmo erro !

Guilherme_Gomes

Tenta tirar a criação da SessionFactory de um bloco estatico e coloca num metodo init (e chama ele do main)…

T


Eu ja tinha colocado isso e não funcionou,
porem coloquei novamente, e deu o mesmo erro !

se vc não mapear sua classe, vai continuar dando erro… oq vc escreveu foi isso??

<mapping class="Entidade.Aluno"/>

em letras maiusculas?

W

Bom fiz as alterações nesses arquivos e funcionou como você me falou !

HibernateUtil.java

package conf;

import org.hibernate.*;
import org.hibernate.cfg.*;


public class HibernateUtil {

    private final SessionFactory sessionFactory;

    public HibernateUtil () {
        try {
            this.sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public Session getSession()
            throws HibernateException {
        return this.sessionFactory.openSession();
    }
    
}

main.jsva

package exec;
import Entidade.Aluno;
import conf.HibernateUtil;
import org.hibernate.Session;


public class Main {

    public static void main(String[] args) {

        Aluno a = new Aluno (1, "Bruno", 22);

        HibernateUtil hu = new HibernateUtil();
        Session session = hu.getSession();

        session.beginTransaction();
        session.save(a);
        session.getTransaction().commit();
        System.out.println(a.toString());

    }

}

Tem alguma maneira mais correta de fazer a classe HibernateUtil ?
Pensei em usar um singleton … o que vcs acham ?

W

Thiago Domingues:

Eu ja tinha colocado isso e não funcionou,
porem coloquei novamente, e deu o mesmo erro !

se vc não mapear sua classe, vai continuar dando erro… oq vc escreveu foi isso??

<mapping class="Entidade.Aluno"/>

em letras maiusculas?


Sim, deu certo agora que alterei o funcionamento da classe
HibernateUtil !

Edit –
Eram os 2 problemas ! Não estava mapeando e a classe HibernateUtil estava com problema !

De qualquer maneira muito obrigado !

C

boa noite,
estou com um problema parecido com o do amigo acima e não consegui resolver com a solução dada.
Não estou utilzando a configuração do Hibernate pelo arquivo “hibernate.cfg.xml”

ERRO APRESENTADO

Exception in thread "main" org.hibernate.MappingException: Unknown entity: br.com.felipe.produtos.modelo.Produto
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at br.com.felipe.produtos.dao.ProdutoDAO.salva(ProdutoDAO.java:19)
at br.com.felipe.produtos.hibernate.AdicionaProduto.main(AdicionaProduto.java:22)

MINHAS CLASSES

CLASSE PRODUTO

package br.com.felipe.produtos.modelo;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.Entity;

@Entity
public class Produto {
	
	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String descricao;
	private double preco;
	
	//GETS
	public Long getId() {
		return id;
	}
	public String getNome() {
		return nome;
	}
	public String getDescricao() {
		return descricao;
	}
	public double getPreco() {
		return preco;
	}
	
	//SETS
	public void setId(Long id) {
		this.id = id;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public void setPreco(double preco) {
		this.preco = preco;
	}

}

CLASSE HibernateUtil

package br.com.felipe.produtos.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import br.com.felipe.produtos.modelo.Produto;


public class HibernateUtil {
	
	private static SessionFactory factory;
	
	public HibernateUtil(){
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produto.class);
		factory = cfg.buildSessionFactory();
	}
		
	public Session getSession(){
		return factory.openSession();
	}
}

CLASSE AdicionaProduto

package br.com.felipe.produtos.hibernate;

import org.hibernate.classic.Session;

import br.com.felipe.produtos.dao.ProdutoDAO;
import br.com.felipe.produtos.modelo.Produto;

 
public class AdicionaProduto {
	
	public static void main(String[] args) {
		
		Session session = (Session) new HibernateUtil().getSession();
		ProdutoDAO dao = new ProdutoDAO(session);
		
		Produto p1 = new Produto();		
		p1.setNome("Produto teste");
		p1.setDescricao("Descrição do produto teste ");
		p1.setPreco(45.90);				
			
		session.beginTransaction(); //Abre transação no banco de dados
		dao.salva(p1);			
		session.getTransaction().commit(); //Confirma transação no banco de dados		
		
		System.out.println("ID do produto : " + p1.getId());		
		
		session.close();		
		
	}

}

Desde ja grato pela ajuda

C

Problema resolvido,

problema era aqui

@Id @GeneratedValue private Long id; private String nome; private String descricao; private double preco;

Tipo correto para o atributo ‘id’ deveria ser ‘int’ e não ‘Long’

Criado 30 de junho de 2009
Ultima resposta 31 de ago. de 2009
Respostas 8
Participantes 4