比如说我的数据库有三个表:
学生表(学号,姓名...)
课程表 (课程号,课程名...)
选课表  (学号,课程号,成绩分数)这样三个表映射成对象的话,我分别写三个类,学生一个类,课程一个类,选课一个类,不知道选课类该怎么写才能够建立那种外键关系?

解决方案 »

  1.   

    选课是形为,没有对应的对象才对。
    第三张表应该是成绩表,
    class Studnet{ Score[] scores;}
    class Score{Course course;}
      

  2.   

    class Student{}//学生类
    class Course{}//课程类
    class ChangeCourse{//选课类
    Student student;//学生
    Course course;//课程
    double score;//分数
    }
    外键关系最好使用实体类
      

  3.   

    还得看业务逻辑,若学生和课程之间是多对多的关系,那么可以提取一个表示选课的类,其成员属性有学生类,课程类,还有分数。其中选课的类与学生和课程都是多对一的关系!若数据量特大,存储类可能会使缓存过大,那么可以在选课类中将学生类,课程类均用int类型的id字段标识。
      

  4.   

    想想如果entity包下如果出现“ChangeCourse”这样的类...难到不觉的怪吗?动词是永远不要出现在类名里的。
      

  5.   

    就算用ChangeCourse, 缓存是指缓存ChangeCourse吗?那Student和Course呢?
    如果不缓存Student和Course的话,ChangeCourse只保存了ID,缓存有什么意义?
    如果缓存Student和Course的话,ChangeCourse保存的只是引用,怎么就知道引用类型的长度要大于int呢。存储类,一个很模糊的说法,指什么?类在VM内通常只加载一次,怎么就使缓存过大了?赞成了的理由又是什么?
      

  6.   

    学生与课程是多对多的关系,因此选课表相当于启中间表的作用,加上还有分数字段,因此这样设计比较好。
    至于说数据量过大,可能会出现缓存过大的原因是:
    由于选课类与学生和课程都是多对一的关系,也就是说由选课类维护其关系,如学生选课,则需要传学生类到选课的管理类中,并建立关联,若学生类的属性过多,加之数据量过大,就会产生缓存过大的问题(尤其是启用二级缓存并同时进行很多操作时这种影响更为明显)。
    这时就可以考虑使用int类型标识学生类和课程类了,此种情况下,学生选课,学生退课等只需传相关的int类型的标识就行了。
      

  7.   

    多对多不只一种表示方法,为什么要改成两个many2one,这样设计怎么就好了?总不能说因此就因此吧。
    二级缓存又是什么?缓存的目的是什么,为什么要缓存ChangeCource, 并发操作效率和属性多少有什么关系?
    使用int属性和“学生选课,学生退课等只需传相关的int类型的标识”,有什么关系,不使用int就不能只传ID进行操作了吗?