当前页面: 开发资料首页 → J2EE 专题 → Hibernate中的一个数据库问题
Hibernate中的一个数据库问题
摘要: Hibernate中的一个数据库问题
有一个设计上的问题,比如我有1个学生类Student,有一个课程类Course,学生与课程是多对多的关系,如果要使用many-to-many标签的话,Hibernate会自动生成一个中间表,现在我需要对学生的课程给个成绩,这个成绩不应当单独属于学生或者课程类,而应当在中间表中,由一对学生-课程来决定一个成绩。问题是,如果我让Hibernate自动生成中间表的话,成绩该如何去存取?如果把中间表也做成一个类,把学生(课程)与中间表的关系改成一对多的关系,好象学生与课程之间的联系就显得不太紧凑了。这个POJO和数据库该怎么设计才既符合面向对象思想又能方便地存取呢?
好像我们这边的做法是再弄一个考试的概念,一场考试对应一门课程,一场考试对应多个学生,其实根据你的理解的话也就相当于另外再自己弄一个映射表(课程与学生一对多)
学生表:
id student_name other_column
课程表:
id class_name
中间表:
id student_id class_id result
在现在的数据库设计模式中,多对多的关系只能采用中间表来解决
同意楼上
多对多的关系只能有中间表来解决.先学生表先和中间表映射多对一(mang-to-one)关系.在中间表和课程表映射一对多双向自己关联关系,估计可以解决你的问题...
同意楼上的各位,但楼主要尽量少用多对多的关系,采取延迟加载(Lazy Loading)来避免无谓的开支
up!
mark!
其实我一度倾向于wizardblue() 的方法,因为如果用many-to-many的关系的话对中间表的读取就显得不那么“面向对象”了是吧?大家讨论下这个是不是最好的方法了呢
我同意zhang2415所说的
同意wizardblue()的说法,学生跟课程本来是多对多的关系,如果你不想用多对多,那就再引如考试的概念,这样学生跟考试,以及课程对考试都是一对多的关系了,也就是把一个多对多关系分成两个一对多的关系.
学到现在了你怎么在建表上还能有多对多的关系呢?
为什么不能先搞个中间表,把表关系搞成一对多的,要是一对多的话就不存在你问题!
回头试想一下吧!