0

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

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

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 将所有手机加载到列表中,只需要手机...

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

4

2 回答 2

2

我认为您的示例行不通,因为实际上Phone每个人都有多个 s 。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)

于 2012-11-29T10:00:39.063 回答
0

你有没有尝试过?这是完全有效的,但你也可以考虑Phone用类型标记类(无论如何你都需要它来区分住宅、办公室等),除非你住在一个电话号码长的国家,否则获取它们的开销一切都不是那么大:-)

干杯,

于 2012-11-29T09:01:03.397 回答