簡體   English   中英

在Hibernate中正確實現一對多單向關系

[英]Properly Implementing a One to Many Unidirectional Relationship in Hibernate

我正在嘗試學習如何使用Hibernate來實現Java Object Persistence。 具體來說,我試圖弄清楚如何實現單向一對多映射。 我已經閱讀了休眠文檔以及有關該主題的眾多Stackoverflow問題,但這些問題尚不完全清楚,所以我想知道實現此問題的正確方法是什么。

這是我嘗試映射的Java對象的一個​​示例(極其簡化):

public class Student {
    private List<StudentGrade> grades;

}

public class StudentGrade {
    private char letterGrade;
    private double percentageGrade;
}

所以問題是,我該如何編寫hbm.xml文件來對此進行映射?

休眠文檔建議,在這種情況下,將其放置在Student的映射文件中就足夠了。 當然,假設我已經完全充實了Student和StudentGrade的映射文件。

<many-to-one name="StudentGrade" column="grade_id" />

但是,它僅顯示映射文件,而不顯示隨附的Java對象。 在映射文件中,該多對一元素與其他屬性一起列出。 它不包含在列表或set元素中。 在其他地方確實顯示了使用Collection的Java對象(在示例中為Set實現為HashTable),它具有一個映射文件,如下所示:

<set name="events" table="PERSON_EVENT">
    <key column="PERSON_ID"/>
    <many-to-many column="EVENT_ID" class="Event"/>
</set>

這也是我在許多StackOverflow問題中所看到的。 那么實現此目標的正確方法是什么?

您引用的兩個示例是多對一和多對多映射,這兩個都不適用於您的模型。 您需要一對多映射。

給定您的StudentStudentGrade類,您需要在Student的映射描述符中添加以下內容:

<list name="grades">
   <list-index column="idx"/>
</list>

您還將需要StudentGrade的類映射。

確定要列出清單嗎? 列表在數據庫中需要一個顯式的列表位置列,我想您實際上並不需要它。 Set或Bag易於在Hibernate中映射,並且需要較少的數據庫列。 請參閱文檔以獲取有關如何映射包,集,映射,列表等的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM