关于Hibernate“多对多”配置有关问题,该有关问题的现实模型是学生按课程查询成绩
关于Hibernate“多对多”配置问题,该问题的现实模型是学生按课程查询成绩。
有三个类Student、Course、Score。
Student.java
Course.java
Score.java
数据库表:
表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
Course.hbm.xml
如果要获取学生的成绩就是student.courses,如果要获取选修该课程就是course.students.
但是现在多了个Score类而且t_stu_cou_score还多了个score字段(也即中间表多了非外键的其他字段),该如何设置呢?如果要获取某一学生的某一课程的成绩该如何调用呢?这3个类该如何修改?
------解决方案--------------------
别考虑多对多,可以建立t_student与t_stu_cou_score的一对多和t_course与t_stu_cou_score的一对多关系
有三个类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的一对多关系