Hibernate: mapeamento de fk

3 respostas
plentz

Buenas, xô explicar resumidamente. Tenho uma classe Curso e uma classe CursoLog.
Curso possu relacionamento OneToMany pra CursoLog. Mas o relacionamento se dá a partir da coluna cd_curso, porém,
a pk (Ou ID, como preferirem) de CursoLog é cd_curso MAIS dt_cancelamento.
Se eu tento fazer o mapeamento só pelo cd_curso, o hibernate me apita com o seguinte erro:

A Foreign key refering xxx.Curso has the wrong number of column. should be 2

E ai José?

3 Respostas

plentz

Buenas, problema resolvido...

Foi só inverter o lado mapeado...

Na curso, ficou
private Set<CursoLog> cursoLog;

       @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY,
mappedBy = "Curso")
       public Set<CursoLog> getCursoLog() {
               return this.cursoLog;
       }

       public void setcursoLog(Set<CursoLog> cursoLog) {
               this.cursoLog = cursoLog;
       }
CursoLog
@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
       @JoinColumns( {
               @JoinColumn(name = "cd_escola", unique = false, nullable = false,
insertable = false, updatable = false),
               @JoinColumn(name = "cd_curso", unique = false, nullable = false,
insertable = false, updatable = false) })
       public Curso getCurso() {
               return Curso;
       }

       public void setCurso(Curso Curso) {
               this.Curso = Curso;
       }
pimentaft

Olá amigo!
Eu to começando com hibernate e estou com esse erro igualzinho que vc estava. MAs parece que esta tudo correto, mas ele dá o erro:

eu quero aprender a configurar isso de uma vez por todas, mas tah dificil…rs
olha o código:

Andar.class

@IdClass(Andar.class)
@Entity
public class Andar implements Serializable{
	@Id
	@ManyToOne
		@JoinColumn(name="codbloco")
	private Bloco bloco;
	@Id
	@ManyToOne 
		@JoinColumn(name="codpavimento")
	private Pavimento pavimento;
	
	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY,   
			mappedBy = "andar") 
	private List<Sala> salas;		
	
	@Column(name="banheiro")
	private int banheiro;
	@Column(name="bebedouro")
	private int bebedouro;
	
	public int getBanheiro() {
		return banheiro;
	}
	public void setBanheiro(int banheiro) {
		this.banheiro = banheiro;
	}
	public int getBebedouro() {
		return bebedouro;
	}
	public void setBebedouro(int bebedouro) {
		this.bebedouro = bebedouro;
	}
	
	public Bloco getBloco() {
		return bloco;
	}
	public void setBloco(Bloco bloco) {
		this.bloco = bloco;
	}
	public Pavimento getPavimento() {
		return pavimento;
	}
	public void setPavimento(Pavimento pavimento) {
		this.pavimento = pavimento;
	}
	public List<Sala> getSalas() {
		return salas;
	}
	public void setSalas(List<Sala> salas) {
		this.salas = salas;
	}
}
@Entity
@IdClass(TipoSala.class)
public class TipoSala {
	@Id
	@Column(name="codtiposala")
	private int codTipoSala;
	
	@Column(name="dsctiposala")
	private String dscTipoSala;
	
	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY,   
			mappedBy = "tiposala") 
	private List<Sala> salas;
	
	public int getCodTipoSala() {
		return codTipoSala;
	}
	public void setCodTipoSala(int codTipoSala) {
		this.codTipoSala = codTipoSala;
	}
	public String getDscTipoSala() {
		return dscTipoSala;
	}
	public void setDscTipoSala(String dscTipoSala) {
		this.dscTipoSala = dscTipoSala;
	}
	public List<Sala> getSalas() {
		return salas;
	}
	public void setSalas(List<Sala> salas) {
		this.salas = salas;
	}
	
}

sala.class

@IdClass(Sala.class)
@Entity
public class Sala implements Serializable{
	@Id
	@Column(name="codsala")
	private String codSala;
	@Column(name="capacidade")
	private int capacidade;
	@Column(name="arcondicionado")
	private int arCondicionado;
	@Column(name="ventilador")
	private int ventilador;
	@Column(name="ativo")
	private String ativo;
	@Column(name="dscsala")
	private String dscSala;
	@Column(name="tipoquadro")
	private String tipoQuadro;
	@Column(name="datashow")
	private String dataShow;
	
	
	@ManyToOne
		@JoinColumn(name="codtiposala")
	private TipoSala tipoSala;
	
	@Id
	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)   
		@JoinColumns( {   
	        	@JoinColumn(name = "codbloco"),   
	        	@JoinColumn(name = "codpavimento")}) 			
	private Andar andar;
	
	public Andar getAndar() {
		return andar;
	}
	public void setAndar(Andar andar) {
		this.andar = andar;
	}
	public String getCodSala() {
		return codSala;
	}
	public void setCodSala(String codSala) {
		this.codSala = codSala;
	}
	public int getCapacidade() {
		return capacidade;
	}
	public void setCapacidade(int capacidade) {
		this.capacidade = capacidade;
	}
	public int getArCondicionado() {
		return arCondicionado;
	}
	public void setArCondicionado(int arCondicionado) {
		this.arCondicionado = arCondicionado;
	}
	public int getVentilador() {
		return ventilador;
	}
	public void setVentilador(int ventilador) {
		this.ventilador = ventilador;
	}
	public String getAtivo() {
		return ativo;
	}
	public void setAtivo(String ativo) {
		this.ativo = ativo;
	}
	public String getDscSala() {
		return dscSala;
	}
	public void setDscSala(String dscSala) {
		this.dscSala = dscSala;
	}
	public String getTipoQuadro() {
		return tipoQuadro;
	}
	public void setTipoQuadro(String tipoQuadro) {
		this.tipoQuadro = tipoQuadro;
	}
	public String getDataShow() {
		return dataShow;
	}
	public void setDataShow(String dataShow) {
		this.dataShow = dataShow;
	}
	public TipoSala getTipoSala() {
		return tipoSala;
	}
	public void setTipoSala(TipoSala tipoSala) {
		this.tipoSala = tipoSala;
	}
}

Se vocÊ puder me ajudar…qdo tiver um tempinho…agradeço!

pimentaft

Já to ficando doidão com essas configurações do hibernate…

Criado 17 de agosto de 2006
Ultima resposta 3 de out. de 2008
Respostas 3
Participantes 2