Prezados,
hipoteticamente possuo uma Entidade EMPRESA (ID_NOME, ID_CNPJ, TELEFONE) e uma Entidade CARGO(CARGO_ID, NOME, REMUNERACAO) que possui um relacionamento ManyToOne com EMPRESA.
Sabendo que ID_NOME e ID_CNPJ são uma chave composta da entidade EMPRESA,
como faço para que a tabela CARGO possua em sua estrutura ID_NOME e ID_CNPJ como colunas?
Como é o mapeamento em JPA nesta situação?
Gostaria que a estrutura ficasse assim!
EMPRESA (ID_NOME, ID_CNPJ, TELEFONE)
CARGO(CARGO_ID, NOME, REMUNERACAO, NOME_EMPRESA, CNPJ_EMPRESA)
Desde já, agradeço a cooperação!
Teste assim na entidade cargo
@ManyToOne
@JoinColumns({
@JoinColumn(name = "NOME_EMPRESA", referencedColumnName = "NOME_EMPRESA", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "CNPJ_EMPRESA", referencedColumnName = "CNPJ_EMPRESA", nullable = false, insertable = false, updatable = false),
})
private Empresa empresa;
Olá fdiaz2011! Obrigado por responder!
Eu fiz o que você falou, porém deu o seguinte erro:
[color=red]
Caused by: org.hibernate.AnnotationException: A Foreign key refering Empresa from Cargo has the wrong number of column. should be 2[/color]
Segue abaixo as classes:
Empresa
[code]public class Empresa {
@EmbeddedId
private EmpresaPK idEmpresa;
@Column(name = "TELEFONE", nullable = false)
private String telefone;
//Getters and Setters...
}[/code]
EmpresaPK
[code]
@Embeddable
public class EmpresaPK {
@Column(name = “ID_NOME”, nullable = false)
private String idNome;
@Column(name = "ID_CNPJ", nullable = false)
private String idCnpj;
//GETTERS AND SETTERS...
}[/code]
Cargo
[code]public class Cargo {
@Id
@GeneratedValue
@Column(name = “CARGO_ID”, nullable = false)
private BigDecimal idCargo;
@Column(name = "NOME", nullable = false)
private String nome;
@Column(name = "REMUNERACAO", nullable = true)
private BigDecimal remuneracao;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "NOME_EMPRESA", referencedColumnName = "ID_NOME", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "CNPJ_EMPRESA", referencedColumnName = "ID_CNPJ", nullable = false, insertable = false, updatable = false),
})
private Empresa empresa;
}[/code]
Cara, eu não tenho muita experiencia com chave composta, mas tenta o seguinte.
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = “idNome”, column = @Column(name = “ID_NOME”, nullable = false)),
@AttributeOverride(name = “idCnpj”, column = @Column(name = “ID_CNPJ”, nullable = false)) })
private EmpresaPK idEmpresa;
Ih companheiro, não deu certo aqui não, mas creio que o caminho é usar o @AttributeOverrides . Tentando aqui.
Alguém sabe mapear uma chave estrangeira composta???