为实体

时间:2015-11-06 14:25:02

标签: java hibernate code-design

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

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会如何“翻译”这个?

希望我的想法得到明确,提前感谢任何提示!

Course class diagram

1 个答案:

答案 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

所以不需要发明一些“包装”实体。