JPA:使用复合主键进行地图关系

时间:2015-02-23 15:12:33

标签: hibernate java-ee jpa eclipselink

关于地图的relation mapping example后,我有

员工

ID  FIRSTNAME   LASTNAME    SALARY
1   Bob         Way         50000
2   Sarah       Smith       60000

PHONE

ID  OWNER_ID    PHONE_TYPE  AREACODE    NUMBER
1   1           home        613         792-7777
2   1           cell        613         798-6666
3   2           home        416         792-9999
4   2           fax         416         798-5555

地图键列关系注释的示例

@Entity
public class Employee {
  @Id
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  @MapKeyColumn(name="PHONE_TYPE")
  private Map<String, Phone> phones;
  ...
}

@Entity
public class Phone {
  @Id
  private long id;
  ...
  @ManyToOne
  private Employee owner;
  ...
}

有没有办法表明OWNER_ID和PHONE_TYPE是复合主键?

1 个答案:

答案 0 :(得分:1)

无法发出复合主键的信号,因为PHONE_TYPE是Employee类中Map的一部分,而OWNER_id是Phone类的一部分。除此之外,这也不是您的主键:主键是id属性(就像您拥有它一样)。您实际需要的是在这两列上指定唯一键。为了做到这一点,一个解决方案是放弃Employee类中的Map并移动phoneType类中的Phone,然后在其中添加{{1} }}。

PS:当然,如果您可以/希望您可以简单地在数据库级别上进行约束,而无需对Java代码级别进行任何更改。