首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

关于Hibernate“多对多”配置有关问题,该有关问题的现实模型是学生按课程查询成绩

2012-03-09 
关于Hibernate“多对多”配置问题,该问题的现实模型是学生按课程查询成绩。有三个类Student、Course、Score。Stu

关于Hibernate“多对多”配置问题,该问题的现实模型是学生按课程查询成绩。
有三个类Student、Course、Score。

Student.java

Java code
public class Student {    private int id;//学号        private String name;//姓名     private Set<Course> courses;//课程集}


Course.java
Java code
public class Course {    private int id;//课程号    private String name;课程名    private Set<Student> students;//学生集}


Score.java
Java code
public class Score {    private int score;//分数}


数据库表:
表t_student字段有:
ID(自增主键)、NAME

表t_course字段有:
ID(自增主键)、NAME

表t_stu_cou_score字段有:
SID、CID、SCORE

我只知道在不需要查成绩的情况下,即t_stu_cou_score表中只有sid和cid字段而且不需要Score类,那么Student和Course就可以通过Hibernate的“多对多”的关系在xml文件中设置且仅需设置Student.hbm.xml和Course.hbm.xml文件即可。配置信息如下:

Student.hbm.xml
XML code
<hibernate-mapping>    <class name="com.cn.Student" table="t_student" >        <id name="id" type="java.lang.Integer">            <column name="ID" length="4" />            <generator class="native"/>        </id>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <set name="courses" lazy="true" cascade="all" table="t_stu_cou_score">            <key column="SID"></key>            <many-to-many class="com.cn.Course" column="CID" />        </set>    </class></hibernate-mapping>


Course.hbm.xml
XML code
<hibernate-mapping>    <class name="com.cn.Course" table="t_course">        <id name="id" type="java.lang.Integer">            <column name="ID" length="4" />            <generator class="native"/>        </id>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <set name="students" lazy="true" cascade="all" table="t_stu_cou_score">            <key column="CID"></key>            <many-to-many class="com.cn.Student" column="SID" />        </set>    </class></hibernate-mapping>


如果要获取学生的成绩就是student.courses,如果要获取选修该课程就是course.students.

但是现在多了个Score类而且t_stu_cou_score还多了个score字段(也即中间表多了非外键的其他字段),该如何设置呢?如果要获取某一学生的某一课程的成绩该如何调用呢?这3个类该如何修改?

[解决办法]
别考虑多对多,可以建立t_student与t_stu_cou_score的一对多和t_course与t_stu_cou_score的一对多关系

热点排行