如何在hibernate中使用复合键进行一对一映射

时间:2012-05-11 13:24:39

标签: hibernate

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

学生 RollNumber Integer,StudentName String

课程 CourseID Integer,CourseName String

StudentCourses RollNumber Integer,CourseID Integer,AllotedRoom Integer

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表中选择的任何记录,我想获得学生姓名以及 课程名。我的映射文件应该如何?

1 个答案:

答案 0 :(得分:0)

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

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

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