Olá pessoal, estou encontrando problemas no mapeamento de algumas classes.
Se eu “iniciar” a aplicação com a anotação @Entity apenas nas classes Warehouse e District, a coisa funciona e as tabelas são geradas automaticamente (sim, as tabelas não exisem e eu quero gerá-las de forma automática). Agora, se eu também “anoto” a classe Customer com @Entity e inicio a aplicação novamente, aparece a seguinte Exception:
Caused by: org.hibernate.MappingException: Unable to find column with logical name: D_W_ID in District
Já tentei trocar o @JoinColumns da classe Customer por
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="C_D_ID", referencedColumnName="D_ID"),
@PrimaryKeyJoinColumn(name="C_W_ID", referencedColumnName="D_W_ID")
})
Também não deu certo. Deu um erro dizendo que a quantidade de colunas na chave estrangeira não é a mesma.
Alguém sabe como resolver isso?
Obrigado.
Murilo
Obs: Segue o código das classes:
Warehouse
package model;
//imports ...
@Entity
public class Warehouse implements Serializable {
private static final long serialVersionUID = 1404407062808670787L;
private int id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "W_ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "W_NAME", length = 10)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int hashCode() {
...
}
public boolean equals(Object obj) {
...
}
}
District
package model;
//imports
@Entity
@IdClass(DistrictPK.class)
public class District implements Serializable {
private static final long serialVersionUID = 2738561498899875467L;
private long id;
private Warehouse warehouse;
private String name;
@Id
@Column(name = "D_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Id
@ManyToOne
@JoinColumn(name="D_W_ID", referencedColumnName="W_ID")
public Warehouse getWarehouse() {
return warehouse;
}
public void setWarehouse(Warehouse warehouse) {
this.warehouse = warehouse;
}
@Column(name = "D_NAME", length = 10)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int hashCode() {
...
}
public boolean equals(Object obj) {
...
}
}
DistrictPK
package model;
// imports ...
@Embeddable
public class DistrictPK implements Serializable {
private static final long serialVersionUID = 2738561498899875467L;
private long id;
private Warehouse warehouse;
public DistrictPK() {
}
public DistrictPK(long id, Warehouse warehouse) {
this.id = id;
this.warehouse = warehouse;
}
@Column(name = "D_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="D_W_ID", referencedColumnName="W_ID")
public Warehouse getWarehouse() {
return warehouse;
}
public void setWarehouse(Warehouse warehouse) {
this.warehouse = warehouse;
}
public int hashCode() {
...
}
public boolean equals(Object obj) {
...
}
}
Customer
[code]
package model;
// imports …
@Entity
@IdClass(CustomerPK.class)
public class Customer implements Serializable {
private static final long serialVersionUID = -6640493644418267201L;
private Long id;
private District district;
private String first;
@Id
@Column(name = "C_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Id
@ManyToOne
@JoinColumns({
@JoinColumn(name = "C_D_ID", referencedColumnName = "D_ID"),
@JoinColumn(name = "C_W_ID", referencedColumnName = "D_W_ID")
})
public District getDistrict() {
return district;
}
public void setDistrict(District district) {
this.district = district;
}
@Column(name = "C_FIRST", length = 16)
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public int hashCode() {
...
}
public boolean equals(Object obj) {
...
}
}[/code]
CustomerPK
package model;
// import ...
@Embeddable
public class CustomerPK implements Serializable {
private static final long serialVersionUID = -3027683724302033800L;
private Long id;
private District district;
public CustomerPK() {
}
public CustomerPK(Long id, District district) {
this.id = id;
this.district = district;
}
@Column(name = "C_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne
@JoinColumns({
@JoinColumn(name = "C_D_ID", referencedColumnName = "D_ID"),
@JoinColumn(name = "C_W_ID", referencedColumnName = "D_W_ID")
})
public District getDistrict() {
return district;
}
public void setDistrict(District district) {
this.district = district;
}
public int hashCode() {
...
}
public boolean equals(Object obj) {
...
}
}