2016-02-13 42 views
0

這些都是從Java持久性所使用Hibernate(曼寧)的實例之間的一個一對多的映射。我感到困惑的2個例子在書中如何閱讀2個實體

enter image description here

在這種情況下,一個用戶可以有很多的結算明細。然而只的計費細節之一是缺省值,因此用戶具有單個defaultBilling變量。

關於這一點,這是爲什麼我們使用@ManyToOne和@OneToMany不是映射?我如何閱讀這些?我的印象是,在用戶類別的映射是從用戶和移動到BillingDetails讀下。因此,我希望看到@OneToMany(閱讀它作爲一個用戶有很多的結算明細。)

展望未來,在另一個例子在書中

enter image description here

這裏的變化是我們存儲所有每個用戶的結算細節(而不是單個默認結算細節)。在這種情況下,我看到了@OneToMany批註是內嵌我的期望

可以在任何精心設計的第一個例子是如何使用的逆映射?或者是書中的勘誤表?

回答

0

以下映射:

@Entity 
public class User { 
    @ManyToOne 
    private BillingDetails; 

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

告訴你,一個用戶可以有多種計費的詳細信息,但其中只有一個是默認的。這是一個有效的組合,所以你所描述的實際上是兩種不同的用例。

另一種方法是去除@ManyToOne協會和一個新的屬性/列添加到BillingDetails本身,這將包含信息進行計費是否是屬於用戶的默認之一,但相對於保持它有兩個缺點在User信息:

  1. 更改初始結算明細,你在BillingDetails表更新兩行,一行來清除舊的默認和其他設置默認。
  2. 在獲得了用戶的默認結算明細,你會遍歷所有的計費細節的集合的用戶,也需要實現一個單獨的查詢來獲取它。