nesse exemplo que te passei é uma chave UK composta de dois campos onde um deles de uma FK com outra tabela
por referência pois só vai entrar valor nesse campo se existir na tabela pai.
outro exemplo abaixo onde existe três campos como chave na classe PostoUsuarioId
e na classe abaixo como vai ficar chave composta UK e suas referência
espero ter ajudado…
@Embeddable
public class PostoUsuarioId implements Serializable {
private static final long serialVersionUID = -4476596399409381166L;
@Column(name = "CD_POSTO_ATENDIMENTO")
private Long postoId;
@Column(name = "CD_USUARIO")
private Long usuarioId;
@Column(name = "CD_PERFIL")
private Long perfilId;
public PostoUsuarioId() {
}
PostoUsuarioId(Long usuarioId, Long postoId, Long perfilId) {
this.usuarioId = usuarioId;
this.postoId = postoId;
this.perfilId = perfilId;
}
public Long getPostoId() {
return postoId;
}
@Entity
@Table(name = "TB_PTA_POSTO_AGENDAMENTO")
public class PostoAgendamento implements EntityModel {
@EmbeddedId
private PostoAgendamentoId id;
private Manutencao manutencao;
@ManyToOne
@JoinColumn(name = "CD_POSTO_ATENDIMENTO", insertable = false, updatable = false)
private Posto posto;
@ManyToOne
@JoinColumn(name = "CD_AGENDAMENTO", insertable = false, updatable = false)
private Agendamento agendamento;
public PostoAgendamento() {
}
public PostoAgendamento(Posto posto, Agendamento agendamento, Long idUsuario) {
this.posto = posto;
this.agendamento = agendamento;
id = new PostoAgendamentoId(posto.getId(), agendamento.getId());
manutencao = new Manutencao(idUsuario);
}
public Serializable getId() {
return id;
}
public Manutencao getManutencao() {
return manutencao;
}
public Posto getPosto() {
return posto;
}
public void setPosto(Posto posto) {
this.posto = posto;
}
Otimos ambos exemplos,
Consegui adaptar pra utilizar no meu sistema aqui e cairam como uma luva…
e para um outro sistema que estou desenvolvendo para meu estágio acho que vou utilizar uma delas…
De quebra ainda consigui fazer de outra forma diferente que por sinal estou utilizando agora!