我有两个实体,“课程”和“人”。
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列表?因为我想从数据库视图中获得一个包含Course ID和SortablePerson ID的表就足够了。有没有人有经验,Hibernate会如何“翻译”这个?
希望我的想法得到明确,提前感谢任何提示!
答案 0 :(得分:1)
不要创建表格布局或UML图表,而是让我们看看JPA能够做什么:
@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
所以不需要发明一些“包装”实体。