Hibernate - Problema com mapeamento de chaves compostas

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) {
		...
	}
}