【问题标题】:How to do one-to-one mapping with composite key in hibernate如何在休眠中使用复合键进行一对一映射
【发布时间】:2012-05-11 13:24:39
【问题描述】:

我有三张桌子。一个学生可以注册多门课程。

学生 RollNumber 整数,StudentName 字符串

课程 CourseID 整数,课程名称字符串

学生课程 RollNumber 整数、CourseID 整数、AllotedRoom 整数

Student.hbm.xml

<hibernate-mapping>
  <class name="myPackage.Student" table="STUDENT">
        <id name="ROLLNUMBER" type="integer">
            <column name="ROLLNUMBER" />
        </id>

        <property name="STUDENTNAME" type="string">
            <column name="STUDENTNAME"/>
        </property>
  </class>
</hibernate-mapping>

Course.hbm.xml

<hibernate-mapping>
  <class name="myPackage.Course" table="COURSE">
        <id name="COURSEID" type="integer">
            <column name="COURSEID" />
        </id>

        <property name="COURSENAME" type="string">
            <column name="COURSENAME"/>
        </property>
  </class>
</hibernate-mapping>

StudentCourses.hbm.xml

<hibernate-mapping>
  <class name="myPackage.StudentCourses" table="STUDENTCOURSES">
        <composite-id name="STUDENTCOURSES_pk" class="myPackage.STUDENTCOURSES_PK">
             <key-property name="STUDENTID" column="STUDENTID"/>
             <key-property name="COURSEID" column="COURSEID"/>
        </composite-id>

        <property name="ALLOTEDROOM" type="integer">
            <column name="ALLOTEDROOM"/>
        </property>
  </class>
</hibernate-mapping>

对于在 StudentCourses 表中选择的任何记录,我想获取学生姓名以及 课程名。我的映射文件应该是什么样子?

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    在您的学生课程中使用多对一,您可以指定链接的课程。 那就是

    <many-to-one name="Student"
                    column="studentid"
                    update="false" insert="false"/>
    

    在您的 Java studentcourse 类中,您可以指定 Student 对象并在查询中使用 studentcourse.student.studentname 检索名称。 BTW StudentCourse 通常是一个类,因此您可能需要更改该名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多