站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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()的说法,学生跟课程本来是多对多的关系,如果你不想用多对多,那就再引如考试的概念,这样学生跟考试,以及课程对考试都是一对多的关系了,也就是把一个多对多关系分成两个一对多的关系.


学到现在了你怎么在建表上还能有多对多的关系呢?
为什么不能先搞个中间表,把表关系搞成一对多的,要是一对多的话就不存在你问题!
回头试想一下吧!


↑返回目录
前一篇: tomcat 问题,在线等解决就给分?
后一篇: hibernate连接SQL2000数据库问题