JPA + Chave Composta

1 resposta
B

Boa noite

Alguém sabe como configurar uma chave composta e também usar uma associação na mesma classe, onde esta associação é referente a chave composta.

1. Tenho uma tabela no banco chamada pessoas, a sua PK é i_pessoas.
2. Tenho uma tabela no banco chamada enderecos, a sua PK é i_pessoas e i_enderecos (Chave composta) onde i_pessoas é FK da tabela pessoas.

Desenvolvi as classes abaixo que funcionam perfeitamente para inserção dos dados (persist(....)), porém quando vou excluir ou atualizar uma Pessoa, o endereco desta pessoa também é altarado nos outros enderecos que possuem o mesmo código, porém são de outra pessoa.

Segue as classes

@Entity
@Table(name="PESSOAS")
public class Pessoas implements ValueObject{

	private static final long serialVersionUID = -3340865594971735825L;
	@Id
	@Column(name="I_PESSOAS")
	private Integer iPessoas;
	@Column(name="NOME")
	private String nome;
	@Column(name="SOBRENOME")
	private String sobrenome;
	@Column(name="IDADE")
	private Integer idade;
	
	//pessoas -->> é o nome do atributo declarado na classe Pessoas
	//Uma Pessoas para muitos Enderecos
	@OneToMany(cascade=CascadeType.ALL, mappedBy="pessoas")
	private List<Endereco> enderecoList;
        
        //-- construtores
        //-- gets e sets
}
@Entity
@Table(name="ENDERECO")
//@IdClass(value=EnderecoPK.class)
public class Endereco implements ValueObject{
	
	private static final long serialVersionUID = 5711153617397182795L;
	
	@Id
	@Column(name="I_ENDERECOS")
	private Integer iEnderecos;
	
	@Column(name="DESCRICAO")
	private String descricao;
	
	//Mapeado uma lista de endereços na classe Pessoas
	//Muitos enderecos para uma Pessoa
	@Id
	@ManyToOne
	@JoinColumn(name="I_PESSOAS",referencedColumnName="I_PESSOAS")
	private Pessoas pessoas;


        //-- construtores
        //-- gets e sets

}

Alguém sabe como eu vou configurar na classe endereco a chave composta, sendo que se eu usar @IdClass.... dá pau

Obrigado a todos

1 Resposta

B

Boa noite!

Fazendo algumas pesuisas cheguei a resposta…

Para resolver o problema, bastou usar a anotação @IdClass como já havia fazendo, porém a coluna que representa a chave estrangeira deve ter os paremetros insertable e updatable setatos para false para que não cause conflitos

Obrigado a todos

Criado 25 de agosto de 2007
Ultima resposta 27 de ago. de 2007
Respostas 1
Participantes 1