如何阅读2个实体之间的一对多映射

时间:2016-02-13 12:25:56

标签: hibernate hibernate-mapping

这些是从Java Persistence With Hibernate(Manning)中获取的示例。我对书中的两个例子感到困惑

enter image description here

在这种情况下,ONE用户可以拥有许多结算明细。但是,只有一个结算明细是默认值,因此用户只有一个defaultBilling变量。

关于这一点,为什么我们使用@ManyToOne而不是@OneToMany进行映射?我怎么读这些?我的印象是用户类中的映射要从用户读取并移动到BillingDetails。因此,我希望看到@OneToMany(将其视为一个用户有很多计费明细。)

继续前进,在本书的另一个例子中

enter image description here

此处的更改是我们为每个用户存储所有结算明细(而不是单个默认结算明细)。在这种情况下,我看到@OneToMany注释符合我的期望

可以详细说明第一个例子如何使用逆向映射?或者这是书中的勘误表?

1 个答案:

答案 0 :(得分:0)

以下映射:

@Entity
public class User {
  @ManyToOne
  private BillingDetails;

  @OneToMany(mappedBy = "user")
  private Collection<BillingDetails> billingDetails;
}

告诉您,用户可以拥有多个结算明细,但其中只有一个是默认结算明细。这是一个有效的组合,所以你所描述的实际上是两个不同的用例。

另一种方法是删除@ManyToOne关联,并向BillingDetails本身添加一个新属性/列,其中包含该计费是否属于其所属用户的默认值的信息,但是与将信息保存在User

相比,它有两个缺点
  1. 更改默认结算明细时,您必须更新BillingDetails表中的两行,一行清除旧默认值,另一行设置默认值。
  2. 在获取用户的默认结算明细时,您将迭代用户的所有结算明细的集合,或者您需要实现单独的查询来获取它。