请教一个关于多对多关系与数据库设计的问题

wctor 2012-11-06 08:18:34
比如有两个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里写什么、怎么写?能这样实现吗?
...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wctor 2012-11-06
  • 打赏
  • 举报
回复
OK 看似可行,我试试去
monrove 2012-11-06
  • 打赏
  • 举报
回复

@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;
}
大概是这么个意思
wctor 2012-11-06
  • 打赏
  • 举报
回复
是啊,关系表已经不仅仅是表述关系了,而我又想不到解决方案,不仅这样做结构上不对,而且似乎也没法插入lvl列的数据,思路陷入死胡同了,求指导...
monrove 2012-11-06
  • 打赏
  • 举报
回复
这样的关系表,实际上已经不单单是关系表了,应当被定义成实体。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧