比如有两个pojo
Teacher.java -- 字段id、name、students;
Student.java -- 字段id、name、teachers;三张表
Teacher -- 列id、name;
Student -- 列id、name;
Teacher_Student 列 teacharId、studentId;以上描述了一个简单的多对多关系:
每个学生有多个教他的老师、每个老师有所教的多个学生;
这种关系在hibernate映射起来没问题;但是现在多了一个需求:
每个老师对其所教的学生,有一个优劣排序。(或每个学生对所教他的老师有一个优劣排序)
这样一来,针对于排序需求实质上是建立在关系表上的,每个学生被多个老师关联,每个老师对多个学生都有一套不同的排序方案。我的初步想法是在关系表上建立两个新的列,用来标明独立的排序方案:Teacher表:        Student表:
 id  name          id  name
  1   张三            1   王五 
  2   李四            2   赵六Teachar_Student关系表:
tid sid t_s_lvl s_t_lvl
 1   1     2      2      -- 在张三眼里,王五是第二好的学生;在王五眼里,张三是第二好的老师;
 2   1     2      1      -- 在李四眼里,王五是第二好的学生;在王五眼里,李四是最好的老师;
 2   2     1      2      -- 在李四眼里,赵六是最好的学生;在赵六眼里,李四是第二好的老师;
 1   2     1      1      -- 在张三眼里,赵六是最好的学生;在赵六眼里,张三是最好的老师;Teacher对象zhangsan,有一个set集合students,排序按照t_s_lvl asc,其他的以此类推;
<set name="students" table="Teacher_Student" sort="???" order-by="???">
            <key>
                <column name="teacherId" not-null="true" />
            </key>
            <many-to-many class="Student" column="studentId" />
        </set>请问各位大侠,在sort或order-by里写什么、怎么写?能这样实现吗?

解决方案 »

  1.   

    是啊,关系表已经不仅仅是表述关系了,而我又想不到解决方案,不仅这样做结构上不对,而且似乎也没法插入lvl列的数据,思路陷入死胡同了,求指导...
      

  2.   


    @Entity
    @Table(name="teacher_student_relation")
    public class TeacherStudentRelation
    {
        @Id
        private String id;    @ManyToOne
        @JoinColumn(name="teacher_id")
        private Teacher teacher;    @ManyToOne
        @JoinColumn(name="student_id")
        private Student student;    private int tsLevel;
        private int stLevel;
    }@Entity
    @Table(name="teachers")
    public class Teacher
    {
        @Id
        private String id;    @OneToMany(mappedBy="teacher")
        @OrderBy("tsLevel")
        private List<TeacherStudentRelation> tsrList;
    }@Entity
    @Table(name="students")
    public class Student
    {
        @Id
        private String id;    @OneToMany(mappedBy="student")
        @OrderBy("stLevel")
        private List<TeacherStudentRelation> tsrList;
    }
    大概是这么个意思