我正在學習一門關于休眠的課程。講師討論了一些有關資料庫的內容。當我們有 1-N 關系,并且可選性為 0 時,最好有一個聯結表來避免空值。只是這對我來說不合適,我希望有人解釋一下。需要明確的是,這個話題基本上是關于冬眠的,我不確定這是否相關。

uj5u.com熱心網友回復:
我認為一對多關系的關聯表是一個糟糕的建議。
首先,你避免空值的論點是錯誤的——如果你有父子關系,你把 FK 放在子表上。因此,如果孩子的數量為零,則根本沒有 FK 指向父的記錄 - 沒有引入空值。
其次,與子表上的 FK 相比,提議的映射效率較低。請參閱使用 JPA 和 Hibernate 映射 @OneToMany 關系的最佳方法:
對于 DBA 來說,這看起來更像是多對多的資料庫關聯,而不是一對多的關系,而且效率也不高。我們現在有三個表,而不是兩個表,因此我們使用了不必要的存盤空間。我們現在有兩個,而不是只有一個外鍵。但是,由于我們很可能要索引這些外鍵,因此我們將需要兩倍的記憶體來快取此關聯的索引。不太好!
類似地,在14 個高性能 Java 持久性技巧中,單向 @OneToMany(Hibernate 將一對多與關聯表映射的方式)被列為效率最低的關系之一。
最后,標題@JoinTable instead @OneToMany具有誤導性 - @JoinTable 可用于配置單向 @OneToMany 關系,它不會取代它。請參閱JPA - 在 @OneToMany 關聯中使用 @JoinTable:
@JoinTable 注解可用于關聯中自定義生成的連接表或映射現有的連接表。在下面的示例中,我們將演示如何將此注釋與 @OneToMany 關聯一起使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347729.html
下一篇:記憶體鍵值快取是否包含參考值?
