Erro de mapeamento

5 respostas
F

Caros,
Não compreendo o que tem de errado nesse código, por favor se alguém souber ficaria grato:

@Entity
public class Pessoa {
	
	@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)  
	private int id;
	@Column(name="nome")
	private String nome;
	
	@OneToMany(cascade = { CascadeType.PERSIST }) 
    private List<Endereco> enderecos = new ArrayList<Endereco>();
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
	public void setEnderecos(List<Endereco> enderecos) {
		this.enderecos = enderecos;
	}
	
	public List<Endereco> getEnderecos() {
		return enderecos;
	}  
	
	

}
//////////////////

public class Endereco {
	@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)  
	private int id;
	@Column(name="rua")
	private String rua;
	@Column(name="pais")
	private String pais;
	public void setRua(String rua) {
		this.rua = rua;
	}
	public String getRua() {
		return rua;
	}
	public void setPais(String pais) {
		this.pais = pais;
	}
	public String getPais() {
		return pais;
	}

}

erro de mapeamento:

Exception in thread "main" java.lang.ExceptionInInitializerError
	at test.main(test.java:17)
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: Pessoa.enderecos[Endereco]
	at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1150)
	at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:680)
	at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:619)
	at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1221)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:383)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at HibernateUtil.<clinit>(HibernateUtil.java:21)
	... 1 more

5 Respostas

Andre_Fonseca

parece que está faltando a classe no seu persistence.xml ou então o nome da classe está errado.

F

olá,
Não é suficiente usar o hibernate.cfg.xml? Pois veja meu HibernateUtil.

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


public class HibernateUtil {
	
	private static SessionFactory factory;  
    private static AnnotationConfiguration cfg;  
  
    public static Session getSession() {  
        return factory.openSession();  
    }  
    static {  
        cfg = new AnnotationConfiguration();  
        cfg.configure();  
      
        factory = cfg.buildSessionFactory(); 
  
    }         
    public static List getlist(String table) {  
        Query query = getSession().createQuery("from "+table);  
        return query.list();  
    }  
}

Agora o hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
F

André Fonseca,
Valeu era isso mesmo :smiley:

F

Acho que estou fazendo algo errado.
vejam:
Um Estado tem muitas cidades, logo:

@Entity
public class Uf {
	
	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)  
	private int id;
	private String nome;
	
	@OneToMany(cascade = { CascadeType.PERSIST }) 
    private List<Cidade> cidades = new ArrayList<Cidade>();
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}
	public void addCidade(Cidade cidade){
		cidades.add(cidade);
	}
	public List<Cidade> getCidades() {
		return cidades;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getId() {
		return id;
	}


}
////
@Entity
public class Cidade {	
	@Id
        @GeneratedValue(strategy = GenerationType.AUTO)  
	private int id;
	private String nome;
	@Column(name="fk_uf")
	private int fk_uf;
	

	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
	public void setFk_uf(int fk_uf) {
		this.fk_uf = fk_uf;
	}
	public int getFk_uf() {
		return fk_uf;
	}

}

Código para criar uma cidade:

Cidade cidade=new Cidade();
		cidade.setFk_uf(1);
		cidade.setNome("Sampa");
    	        Session s=HibernateUtil.getSession();
		s.getTransaction().begin();
		s.save(cidade);
		s.beginTransaction().commit();

Adiciona blz, mas gostaria de poder adicionar diretamente a entidade. Exemplo:

Uf uf=new Uf();
uf.setId(1);
Cidade cidade=new Cidade();
cidade.setNome("Sampa");
cidade.addUf(uf);
Session s=HibernateUtil.getSession();
s.getTransaction().begin();
s.save(cidade);
s.beginTransaction().commit();

Por favor, alguém sabe como faço?Como altero as anotações do JPA?

F

O problema foi resolvido!

Criado 11 de fevereiro de 2011
Ultima resposta 11 de fev. de 2011
Respostas 5
Participantes 2