[英]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問題中所看到的。 那么實現此目標的正確方法是什么?
您引用的兩個示例是多對一和多對多映射,這兩個都不適用於您的模型。 您需要一對多映射。
給定您的Student
和StudentGrade
類,您需要在Student
的映射描述符中添加以下內容:
<list name="grades">
<list-index column="idx"/>
</list>
您還將需要StudentGrade
的類映射。
確定要列出清單嗎? 列表在數據庫中需要一個顯式的列表位置列,我想您實際上並不需要它。 Set或Bag易於在Hibernate中映射,並且需要較少的數據庫列。 請參閱文檔以獲取有關如何映射包,集,映射,列表等的說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.