外键是复合主键的一部分时,Hibernate实体映射?

时间:2015-06-05 14:25:21

标签: hibernate jpa composite-key

我有一个带有复合PK的表:Customer 我有一个没有PK的视图:购买

enter image description here

为了绑定我的实体,Hibernate强迫我声明一个PK。 所以我创建了一个复合PK For Purchase。

Puchase:

@Entity
@Table(name = "PURCHASE")
public class Purchase {

    @EmbeddedId
    private PurchasePK id;
}

PuchasePK:

@Embeddable
public class PurchasePK {

    @Column(name = "CUST_LASTNAME")
    private String custLastname;

    @Column(name = "OBJ_NAME")
    private Long objectName;
}

客户很直接:

@Entity
@Table(name = "CUSTOMER")
public class Customer {

    @EmbeddedId
    private CustomerPK id;
}

使用其复合PK:

@Embeddable
public class CustomerPK {

    @Column(name = "CUST_LASTNAME")
    private String custLastname;

    @Column(name = "CUST_NAME")
    private Long custName;
}

现在,我想通过匹配两个表CUST_NAME在Customer中创建OneToMany attribut。

@OneToMany
private List<Purchase> listPurchases;

我该怎么做?

我搜索了很多,如果PK有2列,它总是归结为无法在1列上进行FK ...

PS:我正在使用JPA 1,因此我无法访问@MapsId。

PS2:我的真实模特不是关于客户&amp;购买和用于PK的attributs不是varchar而是Long。

1 个答案:

答案 0 :(得分:0)

直接回答你的问题 - 我认为你不能这样做。 我建议通过引入CUSTOMER_ID字段重新考虑这个模型,因为第一个+姓氏通常不是独一无二的。此外,仅使用姓氏加入将为您提供购买的组合,因为可能会有&#34; Mike Smith&#34;,&#34; John Smith&#34;作为客户。拥有数字ID可以解决我想到的所有问题。