Olá pessoal eu tenho o seguinte [color=red]CENÁRIO ATUAL:[/color] tenho o relacionamento das tabelas CEP com MUNICIPIO_CEP, onde na MUNICIPIO_CEP tenho o campo CD_MUNICIPIO o codigo usado na busca do municipio na tabela de municipio. [color=red]CENARIO DESEJADO:[/color] eu quero substituir esse campo por uma classe Município , para relacionar com minha tabela MUNICIPIO.
[color=red]CENARIO DESEJADO:[/color]
Para isso eu criei a classe Município e alterei a classe MunicipioCepPK substituindo o campo codigoMunicipio pela Classe Município e fiz o mapeamento conforme descrito abaixo gerou a seguinte exceptio:
Caused by: org.hibernate.AnnotationException: A Foreign key refering MunicipioCep from Cep has the wrong number of column. should be 4
Não estou conseguindo identificar onde estou errando.
classes do Cenário Atual:
[code]@Entity
@Table(name = “CEP”)
public class Cep extends BaseEntity {
private static final long serialVersionUID = -9185450041843009071L;
@EmbeddedId
private CepPK id = new CepPK();
//GET E SET OMITIDOS
}[/code]
[code]@Embeddable
public class CepPK implements Serializable {
private static final long serialVersionUID = 3846381029982040202L;
@Column(name = "CD_CEP", nullable = true, columnDefinition = "number")
private Long cepInicial;
@Column(name = "CD_CEP_FINAL", nullable = true, columnDefinition = "number")
private Long cepFinal;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(value ={
@JoinColumn(name = "CD_MUNICIPIO", nullable = false),@JoinColumn(name = "CD_ESTADO", nullable = false) })
private MunicipioCep municipioCep;
//GET E SET OMITIDOS
}[/code]
[code]@Entity
@Table(name = “MUNICIPIO_CEP”)
public class MunicipioCep extends BaseEntity {
private static final long serialVersionUID = -6319980634679638261L;
@EmbeddedId
private MunicipioCepPK id = new MunicipioCepPK();
@Column(name = "DESCRICAO", length = 50, nullable = true)
private String nomeMunicipio;
//GET E SET OMITIDOS
}[/code]
[code]@Embeddable
public class MunicipioCepPK implements Serializable {
private static final long serialVersionUID = -153778943963374738L;
@Column(name = "CD_MUNICIPIO", nullable = false)
private Long codigoMunicipio;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CD_ESTADO", nullable = false)
private Estado estado;
//GET E SET OMITIDOS
}[/code]
classes do cenário desejado: [color=red]CENÁRIO DESEJADO:[/color]
[code]@Embeddable
public class MunicipioCepPK implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5357538271425975331L;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(value ={
@JoinColumn(name = "SG_UF", nullable = false),
@JoinColumn(name = "CD_MUNICIPIO", nullable = false),@JoinColumn(name = "CD_ESTADO", nullable = false) })
private Municipio municipio;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CD_ESTADO", nullable = false)
private Estado estado;
//GET E SET OMITIDOS
}[/code]
[code]@Entity
@Table(name = “MUNICIPIO”)
public class Municipio extends BaseEntity {
private static final long serialVersionUID = -327710204095971540L;
@EmbeddedId
private MunicipioPk municipioPK = new MunicipioPk();
@Column(name = "NM_MUNICIPIO", length = 50, nullable = false)
private String nomeMunicipio;
@Column(name = "CD_MICROREGIAO_MUNICIPIO", nullable = false)
private Long microRegiaoMunicipio;
@Column(name= "ID_LATITUDE_MUNICIPIO", length = 15, precision = 10, scale = 5, nullable = false)
private Long latitudeMunicipio;
@Column(name= "ID_LONGITUDE_MUNICIPIO", length = 15, precision = 10, scale = 5, nullable = false)
private Long longitudeMunicipio;
//GET E SET OMITIDOS
}[/code]
[code]@Embeddable
public class MunicipioPk implements Serializable{
private static final long serialVersionUID = -95246462039640510L;
@Column(name = "CD_MUNICIPIO", nullable = false)
private Long municipio;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SG_UF", nullable = false)
private Uf uf;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CD_PAIS", nullable = false)
private Pais pais;
//GET E SET OMITIDOS
}[/code]