1

我正在尝试学习如何使用 Hibernate 来实现 Java Object Persistence。具体来说,我试图弄清楚如何实现单向一对多映射。我已经阅读了休眠文档和有关该主题的大量 Stackoverflow 问题,但它们并不完全清楚,所以我想知道实现它的正确方法是什么。

这是我尝试映射的 Java 对象类型的(极其简化的)示例:

public class Student {
    private List<StudentGrade> grades;

}

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

所以问题是,我如何编写 hbm.xml 文件来映射它?

hibernate 文档表明,在这种情况下,放置在 Student 的映射文件中应该足够了。当然,假设我已经完全充实了 Student 和 StudentGrade 的映射文件。

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

但是,它只显示映射文件而不是伴随它的 Java 对象。在映射文件中,该多对一元素与其他属性一起列出。它不包含在列表或集合元素中。在其他地方,它确实显示了使用 Collection 的 Java 对象(在示例中实现为 HashTable 的 Set),它有一个如下所示的映射文件:

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

这也是我在许多 StackOverflow 问题中看到的。那么实现这一点的正确方法是什么?

4

1 回答 1

1

您引用的两个示例是多对一和多对多映射,它们都不适用于您的模型。您需要一对多映射。

给定您的StudentStudentGrade类,您希望在映射描述符中具有以下内容Student

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

您还需要StudentGrade.

确定这是您想要的列表吗?列表需要数据库中有一个明确的列表位置列,我猜你并不需要它。Set 或 Bag 在 Hibernate 中更容易映射,并且需要更少的数据库列。有关如何映射包、集合、地图、列表等的说明,请参阅文档。

于 2010-02-12T15:41:27.773 回答