DIficuldade com Hibernate...iniciante[resolvido]

3 respostas
W

Galera estou criando um BD com 2 tabelas só bem simples... tabela Universidade e tabela centro

consigo adicionar, alterar e remover na Universidade mas no centro que é@ManyToOne eu não consigo inserir.

package teste;
import javax.swing.JOptionPane;

import modelo.centro;

import DAO.ProdutoDao;


import modelo.Universidade;
import modelo.centro;


public class AdicaoDeCentro {

	public static void main(String[] args) {
		
		centro Centro = criaCentro();
		new ProdutoDao().salvaCentro(Centro);
	}
	
		private static centro criaCentro()
		{
			
		centro centro2 = new centro();
		Universidade uni = new ProdutoDao().carregaUniversidade(1);

		centro2.setId(2);
		centro2.setNome("Copacabana");
		centro2.setUniversidade(uni);
		return centro2;
		
		}
	
}

Classe centro

[code]package modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;


import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;


@Entity
public class centro {
	
	@Id
	@Column (name="id_centro")
	private int id;
	
	private String nome;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_universidade", insertable=true, updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade (CascadeType.SAVE_UPDATE)
	private Universidade universidade;

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setUniversidade(Universidade universidade) {
		this.universidade = universidade;
	}

	public Universidade getUniversidade() {
		return universidade;
	}
	
	

}

Classe Universidade

package modelo;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;


@Entity
public class Universidade {

	@Id
	@Column (name="id_universidade")
	private int id;
	
	private String nome;
	
	@OneToMany (mappedBy="universidade", fetch= FetchType.LAZY)
	@Cascade (CascadeType.ALL)
	private Collection<centro> centros;

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setCentros(Collection<centro> centros) {
		this.centros = centros;
	}

	public Collection<centro> getCentros() {
		return centros;
	}
	
	
}
Segue o erro:
Exception in thread "main" org.hibernate.TypeMismatchException: Provided id of the wrong type for class modelo.Universidade. Expected: class java.lang.Integer, got class java.lang.Long
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:109)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:906)
	at org.hibernate.impl.SessionImpl.load(SessionImpl.java:823)
	at org.hibernate.impl.SessionImpl.load(SessionImpl.java:816)
	at DAO.ProdutoDao.carregaUniversidade(ProdutoDao.java:32)
	at teste.AdicaoDeCentro.criaCentro(AdicaoDeCentro.java:33)
	at teste.AdicaoDeCentro.main(AdicaoDeCentro.java:17)

Agradeço desde já pela ajuda.

3 Respostas

emmanuelrock

Olá amigo!

Troque o tipo dos ids de “int” para “Long”, gere os getters e setters dos ids e seja feliz! Flow!

ctdaa

Classes de entidade que tem a chave primária com tipo nativo (int por exemplo) precisam ter os métodos “equals” e “hashCode” sobrescritos. Os ide’s (netbeans e eclipse) fazem isto automaticamente pra voce.
exemplo:

@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Centro other = (Centro) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 73 * hash + this.id;
        return hash;
    }
W

Não acredito que o erro era tão banal…

Flw Amigo funcionou aqui.

Abraços.

Criado 3 de março de 2010
Ultima resposta 3 de mar. de 2010
Respostas 3
Participantes 3