JPA - 一个实体中具有相同类型的多个ManyToMany列表

时间:2015-07-22 19:08:21

标签: java list jpa many-to-many

我有一个包含两个列表的类。两个列表都是相同的类型。两个列表的关系是多对多的。

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

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

自动创建一个如下所示的连接表: Join table for TaskInstance and ScriptExecutableOrder

但是,当我使用getter方法检索列表(即getPreScriptExecutables()getPostScriptExecutables())时,列表会出现故障。通过调试,我确定了这一点:当设置列表时,顺序是一致的。我可以设置列表并获取它们,顺序也是如此。然而,当EntityManager关闭时,显然订单很混乱。当打开一个新的EntityManager并使用getter来检索列表时,ScriptExecutableOrders会对这些对象进行排序。 IDS。打开一个新的EntityManager是指订单完全丢失,即使MySQL表仍处于适当的顺序。

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

我认为以某种方式设置实体和表格的方式导致了这种差异,但我无法弄清楚。我是JPA的新手。

1 个答案:

答案 0 :(得分:1)

我明白了。我对@JoinTableListspreScriptExecutables)使用postScriptExecutables注释,然后我添加了@OrderColumn注释,就像这样

@OrderColumn(name = "list_index")
两个Lists

。这创建了一个用于订购目的的列。