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 完全陌生。
我明白了。我对 Lists
(preScriptExecutables
和 postScriptExecutables
)都使用了 @JoinTable
注释,然后像这样添加 @OrderColumn
注释
@OrderColumn(name = "list_index")
两者 Lists
。这创建了一个用于排序的列。
我有一个包含两个列表的 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 完全陌生。
我明白了。我对 Lists
(preScriptExecutables
和 postScriptExecutables
)都使用了 @JoinTable
注释,然后像这样添加 @OrderColumn
注释
@OrderColumn(name = "list_index")
两者 Lists
。这创建了一个用于排序的列。