JPA在同一父类中将相同的子关系映射两次(不同的基数)

时间:2012-11-29 08:53:45

标签: java hibernate jpa orm entity-relationship

给出2个对象,Person和Phone,其中他们的关系是Person(one)-Phone(很多)。 电话有可变类型,可以有4个可能的值:住宅,办公室,移动,传真。

是否可以在Person中将Phone关系映射两次,如下所示:

class Person {

   @OneToMany(mappedBy = "person")
   <Phone> phones; //this is for : Residential, Office, Fax only

   @OneToOne(mappedBy = "person")
   Phone mobile; //this is for Mobile
}


class Phone {
   @ManyToOne
   @JoinColumn(name = "person_fk")
   Person person;
}

隔离的原因是有屏幕,我会显示手机号码,但不需要加载其他电话号码,所以我认为我不需要jpa将所有手机加载到列表中只需要手机...

这是可以做到的吗?如果是这样,这是正常的做法吗?

2 个答案:

答案 0 :(得分:2)

我认为你的例子不起作用,因为你实际上每个人都有多个Phone。 Hibernate无法与手机区分,并将手机映射到您的mobile

除非您为每种类型的手机创建手机的子类,并且您已获得MobilePhone课程,否则可以将Person更改为

class Person {

   @OneToMany(mappedBy = "person")
   <Phone> phones; //this is for : Residential, Office, Fax only

   @OneToOne(mappedBy = "person")
   MobilePhone mobile; //this is for Mobile
}

这应该有效(我相信:P)

答案 1 :(得分:0)

你尝试过吗?这是完全有效的,但您也可以考虑使用某种类型标记Phone类(无论如何您需要区分住宅,办公室等),除非您居住在真正<的国家/地区/ em>长电话号码,取出它们的开销并不大: - )

干杯,