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

标签 java hibernate jpa orm entity-relationship

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

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

最佳答案

我认为您的示例不起作用,因为实际上每个人都有多个电话。 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)

关于java - JPA 在同一父类中两次映射相同的子关系(不同的基数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621972/

相关文章:

java - 为 TextView 赋值时出现 NullPointer 异常

mysql - Hibernate QuerySyntaxException,表未映射

java - 如何在 Hibernate native 查询中使用常量?

java - hibernate 文档: Parent/Child type relationship

java - 如何在 LinkedList 中搜索特定单词并返回它在列表中的位置以及出现的次数

java - 使用数据库的典型 API 或标准是什么? (关系型、对象型和 Nosql)

java - 使用 JTabbedPane 关闭 JInternalFrame

java - 如何在 hibernate 中忽略加载中的对象引用重用?

java - 根据 JPA 2 中的子参数过滤父级

java - 由JBoss Wildfly和JPA注入(inject)中的: java. lang.NullPointerException引起