我有两个实体,“课程”和“人”。
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如何将其“翻译”的经验?
希望我的想法清楚,在此先感谢您的提示!
最佳答案
让我们看看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
因此,无需发明一些“包装”实体。