Java 为实体启用手动排序

Java 为实体启用手动排序,java,hibernate,code-design,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. Pers

我有两个实体,“当然”和“人”

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
创建课程时可以声明此顺序。但是对于使用应用程序的不同用户来说,没有什么比角色概念更合适的了。也就是说,将只有“一个”用户,而没有什么像
用户

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

1) 这是一个好方法吗

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

2.1)我是否遗漏了一些可能会导致以后映射/创建表时出现问题的内容

2.2)该人员有一份课程列表,但该课程有一份可排序人员列表,这可能是个问题吗?因为我想从数据库视图来看,有一个包含课程ID和可排序人员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;
}

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

您的图表中缺少一个重要实体:用户。当您尝试建模时,您会注意到,
consistsOf
属性没有任何意义。您能更详细地解释一下吗?
consistsOf
属性意味着一门课程可以(但不必)有一个或多个子课程。用户应该从哪里来?您的意思是按用户对课程和人员进行排序吗?这就是我从用户添加手动排序序列的能力中猜到的。在这种情况下,您必须存储每个user.Btw的序列。我通常会先讲课。通常,一个简单的类设计也会导致一个简单的表设计。@TobiasLiefke我编辑了我的文章,希望这能让它更干净一点。感谢您的努力。您告诉代码中的何处创建
负责人订单
组成订单
?如果您使用
列表
界面而不使用
OrderBy
注释,JPA框架将猜测您想要保存订单。与
集合
集合
不同的是,我按照上面的说明实现了它,但没有创建订单列。尽管如此,我还是可以添加带有@OrderColumn注释的行为。但是也有两个表被创建了COURSE\u PERSON和PERSON\u COURSE,这两个表存在两种不同的顺序。一个人的课程顺序和一个人的课程顺序。但目前只有一个表被填满(在某种程度上也是正确的,但最好将两者连接起来,这样当一个人被添加到课程的人员列表中时,他的课程列表就会得到更新)。对不起,我忘记了存储订单需要
OrderColumn
。如果有一个表
PERSON\u COURSE
,则您缺少
responsibleFor
上的
mappedBy
。你真的想订购该列表吗,因为你的原始帖子中没有描述这一点?没错。我最好问一个新问题,把这一点说清楚,并描述一下我到目前为止所取得的成就。
COURSE
------
id, ...

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

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

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