Pessoal,
seguinte eu preciso fazer o mapeamento de um entidade que possui duas chaves estrangeiras como chave primária. Gostaria de saber como faço isso?
eu tentei fazer assim:
@Entity
@Table(name = "siabmtb003_perfilbiometrico")
@SequenceGenerator (name="id_perfilbiometrico_seq", sequenceName="id_perfilbiometrico_seq")
public class PerfilBiometrico implements Serializable {
private static final long serialVersionUID = 1L;
private PerfilBiometricoPK idComposta;
private Byte[] template;
private Integer qualdidadeTemplate;
private Boolean dedoAusente;
@EmbeddedId
@GeneratedValue(generator = "id_perfilbiometrico_seq")
public PerfilBiometricoPK getIdComposta() {
return idComposta;
}
public void setIdComposta(PerfilBiometricoPK idComposta) {
this.idComposta = idComposta;
}
@Column(name = "bi_template")
public Byte[] getTemplate() {
return template;
}
public void setTemplate(Byte[] template) {
this.template = template;
}
@Column(name = "nu_qualidadetemplate")
public Integer getQualdidadeTemplate() {
return qualdidadeTemplate;
}
public void setQualdidadeTemplate(Integer qualdidadeTemplate) {
this.qualdidadeTemplate = qualdidadeTemplate;
}
@Column(name = "ic_dedoausente", nullable = false)
public Boolean getDedoAusente() {
return dedoAusente;
}
public void setDedoAusente(Boolean dedoAusente) {
this.dedoAusente = dedoAusente;
}
}
declarei uma variavei do tipo perfilbiométricoPK que é uma classe e está assim:
@Embeddable
public class PerfilBiometricoPK implements Serializable{
private static final long serialVersionUID = 1L;
private Cadastro idCadastro;
private TipoDedo idTipoDedo;
@ManyToOne (fetch=FetchType.LAZY)
@Cascade (CascadeType.SAVE_UPDATE)
@JoinColumn (name = "co_cadastro_fk")
public Cadastro getIdCadastro() {
return idCadastro;
}
public void setIdCadastro(Cadastro idCadastro) {
this.idCadastro = idCadastro;
}
@ManyToOne (fetch=FetchType.LAZY)
@Cascade (CascadeType.SAVE_UPDATE)
@JoinColumn (name = "co_tipodedo_fk")
public TipoDedo getIdTipoDedo() {
return idTipoDedo;
}
public void setIdTipoDedo(TipoDedo idTipoDedo) {
this.idTipoDedo = idTipoDedo;
}
}
só que está ocorrendo o seguinte erro:
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: br.yyy.xxx.seguranca.siabm.entidade.PerfilBiometrico.idCadastro
alguém pode me ajudar?
Puka
#2
Olha, peguei um projeto que já tinho isso pronto mas não é igual ao que tu fez não.
Tenta isso aqui:
Na classe principal
tira # @SequenceGenerator (name=“id_perfilbiometrico_seq”, sequenceName=“id_perfilbiometrico_seq”)
porque se tem chave primária composta não precisa de sequence.
ao mapear o id coloca só o nome dos atributos que fazem parte da chave primária
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = "idCadastro", column = @Column(name = "co_cadastro_fk", nullable = false))
@AttributeOverride(name = "idTipoDedo", column = @Column(name = "co_tipodedo_fk", nullable = false)) })
Na outra classe PerfilBiometricoPK tem que tirar isso tudo, não dá pra mapear a classe, só o id delas
@ManyToOne (fetch=FetchType.LAZY)
@Cascade (CascadeType.SAVE_UPDATE)
@JoinColumn (name = “co_cadastro_fk”)
public Cadastro getIdCadastro() {
coloca só
@Column(name = "co_cadastro_fk", nullable = false)
private Integer idCadastro;
@Column(name = "co_tipodedo_fk", nullable = false)
private Integer idTipoDedo;
e ainda tem que incluir um contrutor
onde passa todos os parametros
PerfilBiometricoPK( Integer idCadastro, Integer idTipoDedo)
Olá,
Um tempo atrás eu precisei fazer isso e tomei como referência estes posts:
http://www.guj.com.br/posts/list/134922.java
http://www.guj.com.br/posts/list/139085.java
Talvez te ajude,
Wallfox
Obrigado pessoal, consegui resolver.
Posta a solução ai! Isso ajuda caso de outras duvidas sobre o mesmo assunto!
At.
Wallfox
eu fiz assim:
primeira a classe que possui o id de chave composta:
@Entity
@Table(name = "siabmtb003_perfilbiometrico")
//@SequenceGenerator(name = "perfilbiometrico_seq", sequenceName = "perfilbiometrico_seq")
//@IdClass(PerfilBiometricoPK.class)
public class PerfilBiometrico implements Serializable {
private static final long serialVersionUID = 1L;
private PerfilBiometricoPK idComposta;
private Byte[] template;
private Integer qualdidadeTemplate;
private Boolean dedoAusente;
private Cadastro cadastroFK;
private TipoDedo tipoDedoFK;
@EmbeddedId
// @GeneratedValue(generator = "perfilbiometrico_seq")
public PerfilBiometricoPK getIdComposta() {
return idComposta;
}
public void setIdComposta(PerfilBiometricoPK idComposta) {
this.idComposta = idComposta;
}
@Column(name = "bi_template")
public Byte[] getTemplate() {
return template;
}
public void setTemplate(Byte[] template) {
this.template = template;
}
@Column(name = "nu_qualidadetemplate")
public Integer getQualdidadeTemplate() {
return qualdidadeTemplate;
}
public void setQualdidadeTemplate(Integer qualdidadeTemplate) {
this.qualdidadeTemplate = qualdidadeTemplate;
}
@Column(name = "ic_dedoausente", nullable = false)
public Boolean getDedoAusente() {
return dedoAusente;
}
public void setDedoAusente(Boolean dedoAusente) {
this.dedoAusente = dedoAusente;
}
@ManyToOne(fetch = FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "co_cadastro_fk", nullable=false, insertable=false, updatable=false)
public Cadastro getCadastroFK() {
return cadastroFK;
}
public void setCadastroFK(Cadastro cadastroFK) {
this.cadastroFK = cadastroFK;
}
@ManyToOne(fetch = FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "co_tipodedo_fk", nullable=false, insertable=false, updatable=false)
public TipoDedo getTipoDedoFK() {
return tipoDedoFK;
}
public void setTipoDedoFK(TipoDedo tipoDedoFK) {
this.tipoDedoFK = tipoDedoFK;
}
}
Depois a classe que possue as chaves estrangeiras:
@Embeddable
public class PerfilBiometricoPK implements Serializable {
private static final long serialVersionUID = 1L;
private Cadastro idCadastro;
private TipoDedo idTipoDedo;
@Column(name = "co_cadastro_fk", nullable = false)
public Cadastro getIdCadastro() {
return idCadastro;
}
public void setIdCadastro(Cadastro idCadastro) {
this.idCadastro = idCadastro;
}
@Column(name = "co_tipodedo_fk", nullable = false)
public TipoDedo getIdTipoDedo() {
return idTipoDedo;
}
public void setIdTipoDedo(TipoDedo idTipoDedo) {
this.idTipoDedo = idTipoDedo;
}
}