JPA——一个实体中相同类型的多个ManyToMany列表

JPA -- Multiple ManyToMany Lists of the same type in one Entity

我有一个包含两个列表的 class。两个列表属于同一类型。两个列表的关系是多对多的。

@Entity
@Table(name = "task_instance")
public class TaskInstance {
    ...
    @ManyToMany
    private List<ScriptExecutableOrder> preScriptExecutables;

    @ManyToMany
    private List<ScriptExecutableOrder> postScriptExecutables;
    ...
}

一个连接 table 是自动创建的,如下所示:

但是,当我使用 getter 方法检索列表(即 getPreScriptExecutables()getPostScriptExecutables())时,列表出现了乱序。通过调试,我确定了:设置Lists时,顺序是一致的。我可以设置列表并获取它们,并且顺序与预期相同。然而,当 EntityManager 关闭时,显然顺序是混乱的。当打开新的 EntityManager 并使用 getter 检索列表时,对象按 ScriptExecutableOrders 的 ID 排序。开一个新的EntityManager就是顺序完全丢失的时候,即使MySQLtable仍然是正确的顺序。

我还尝试使用 @JoinTable 注释创建单独的连接 table。但是,这并没有解决问题。

我假设我设置实体和 tables 的方式以某种方式导致了这种差异,但我无法弄清楚。我对 JPA 完全陌生。

我明白了。我对 ListspreScriptExecutablespostScriptExecutables)都使用了 @JoinTable 注释,然后像这样添加 @OrderColumn 注释

@OrderColumn(name = "list_index")

两者 Lists。这创建了一个用于排序的列。