我有两个实体,“课程”和“人”。

1)一个或多个人负责课程

2)一门课程可以包含其他课程。

现在,我想实现为负责人和所包含课程添加手动排序顺序的功能。

这意味着,它应该能够显示如下课程:

Course 1:
  Responsible Persons:
   1. Person A
   2. Person B
   3. Person C

Course 2:
  Responsible Persons:
   1. Person B
   2. Person A
   3. Person C


创建课程时可以声明此顺序。但是,对于使用该应用程序的不同用户而言,没有什么像角色概念那样。可以这么说,只有“一个”用户,没有什么像User类。

如下图所示。我想到了两个名为“ SortableCourse”和“ SortablePerson”的新类,它们包含用于排序的其他ID。

1)这是一个好方法吗?

2)我将使用Java和Hibernate进行OR映射:

2.1)我是否错过了某些事情,可能会在以后映射/创建表时引起问题?

2.2)某个人有一个课程列表,但是该课程有一个SortablePersons列表是否会成为问题?因为我想从数据库角度来看,拥有一个包含课程ID和SortablePerson ID的表就足够了。有没有人有过Hibernate如何将其“翻译”的经验?

希望我的想法清楚,在此先感谢您的提示!

java - 对实体启用手动排序-LMLPHP

最佳答案

让我们看看JPA可以做什么,而不是创建表布局或UML图:

@Entity
public class Course {
    ...
    @OneToMany
    @OrderColumn
    private List<Person> responsiblePersons;

    @OneToMany
    @OrderColumn
    private List<Course> consistsOf;
}

@Entity
public class Person {
    ...
    @OneToMany(mappedBy = "responsiblePerson")
    private List<Course> responsibleFor;
}


重要的是带有List声明的@OrderColumn,它表示映射具有稳定的顺序。

这将创建四个表:

COURSE
------
id, ...

PERSON
------
id, ...

COURSE_PERSON
------
course_id, responsiblePersons_id, responsiblePersons_order

COURSE_COURSE
------
course_id, consistsOf_id, consistsOf_order


因此,无需发明一些“包装”实体。

10-04 19:15