我有一个包含两个列表的类。两个列表都是相同的类型。两个列表的关系是多对多的。
@Entity
@Table(name = "task_instance")
public class TaskInstance {
...
@ManyToMany
private List<ScriptExecutableOrder> preScriptExecutables;
@ManyToMany
private List<ScriptExecutableOrder> postScriptExecutables;
...
}
但是,当我使用getter方法检索列表(即getPreScriptExecutables()
和getPostScriptExecutables()
)时,列表会出现故障。通过调试,我确定了这一点:当设置列表时,顺序是一致的。我可以设置列表并获取它们,顺序也是如此。然而,当EntityManager
关闭时,显然订单很混乱。当打开一个新的EntityManager
并使用getter来检索列表时,ScriptExecutableOrders会对这些对象进行排序。 IDS。打开一个新的EntityManager
是指订单完全丢失,即使MySQL表仍处于适当的顺序。
我还尝试使用@JoinTable
注释创建单独的连接表。但是,这并没有解决问题。
我认为以某种方式设置实体和表格的方式导致了这种差异,但我无法弄清楚。我是JPA的新手。
答案 0 :(得分:1)
我明白了。我对@JoinTable
(Lists
和preScriptExecutables
)使用postScriptExecutables
注释,然后我添加了@OrderColumn
注释,就像这样
@OrderColumn(name = "list_index")
两个Lists
的。这创建了一个用于订购目的的列。