Hibernate - Relacionamento One To Many Com Composite Id

1 resposta
J

Pessoa, tenho um relacionamento Aluno - Livro, por exemplo.

Aluno tem uma chave composta, constituída de matricula e cpf. Vejam o mapeamento:

package framework.classesTeste;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.EmbeddedId;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import javax.persistence.FetchType;
import java.util.Collection;

@Entity
@Table(name = "aluno",schema="")
public class Aluno {

	@EmbeddedId
	AlunoCompositePK alunocompositepk;

	@OneToMany(mappedBy="aluno", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Livro>  livro;

	public Aluno() {

	}

	public void setAlunoCompositePK( AlunoCompositePK alunocompositepk ){

		this.alunocompositepk = alunocompositepk;

	}

	public AlunoCompositePK getAlunoCompositePK(){

		return this.alunocompositepk;

	}

	public void setLivroCollection(Collection<Livro> livro) {

		this.livro = livro;
	}
	public Collection<Livro> getLivroCollection(){

		return this.livro;
	}
}

A classe que representa a composite id é:

package framework.classesTeste;
import javax.persistence.Embeddable;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Id;

@Embeddable
public class AlunoCompositePK implements Serializable {

	public AlunoCompositePK() {

	}

	@Id
	@Column(name="", unique=false, insertable=true, columnDefinition="", scale=0)
	private int matricula;

	@Id
	@Column(name="", unique=false, insertable=true, columnDefinition="", scale=0)
	private String cpf;

	public void setMatricula( int matricula ){

		this.matricula = matricula;

	}

	public int getMatricula(){

		return this.matricula;

	}

	public void setCpf( String cpf ){

		this.cpf = cpf;

	}

	public String getCpf(){

		return this.cpf;

	}

}
E a classe de Livro é:
package framework.classesTeste;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;

@Entity
@Table(name = "Livro",schema="")
@SequenceGenerator(name="livro_seq",sequenceName="livro_id_seq")
public class Livro {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "livro_seq")
	@Column(name="idLivro", unique=false, insertable=false, columnDefinition="", scale=0)
	private int idlivro;

	@Column(name="nome", unique=false, insertable=true, columnDefinition="", scale=0)
	private String nome;

	public void setIdLIvro( int idlivro ){

		this.idlivro = idlivro;

	}

	public int getIdLIvro(){

		return this.idlivro;

	}

	public void setNome( String nome ){

		this.nome = nome;

	}

	public String getNome(){

		return this.nome;

	}

	@ManyToOne(fetch = FetchType.EAGER)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	@JoinColumn(name="aluno_matricula", insertable = true, updatable = true)
	private Aluno aluno;

	public Livro() {

	}

	public void setAluno( Aluno aluno ){

		this.aluno = aluno;

	}

	public Aluno getAluno(){

		return this.aluno;

	}

}

No entanto, só tá mapeando uma das chaves, e está dando erro. Gostaria que me ajudassem, pois não sei como mapear para a chave composta. Conto com vocês! Obrigado!

1 Resposta

romuloff

Qual a descrição do erro e/ou trace ?

Criado 15 de maio de 2009
Ultima resposta 5 de jun. de 2009
Respostas 1
Participantes 2