关于地图的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是复合主键?
答案 0 :(得分:1)
无法发出复合主键的信号,因为PHONE_TYPE是Employee
类中Map的一部分,而OWNER_id是Phone
类的一部分。除此之外,这也不是您的主键:主键是id属性(就像您拥有它一样)。您实际需要的是在这两列上指定唯一键。为了做到这一点,一个解决方案是放弃Employee类中的Map
并移动phoneType
类中的Phone
,然后在其中添加{{1} }}。
PS:当然,如果您可以/希望您可以简单地在数据库级别上进行约束,而无需对Java代码级别进行任何更改。