Java Hibernate对具有复合键的子实体执行错误的插入顺序

Java Hibernate对具有复合键的子实体执行错误的插入顺序,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有一个依赖于插入顺序的表(我无法更改的糟糕的遗留设计),并且临时实体以错误的顺序插入。该表被称为“均值”,是“信念”的子实体。当session.save(信念)时时,动作将级联到子mean实体,该实体存储为信念类中的列表。均值实体以适当的顺序存储在belience.getMeans()列表中,但一旦持久化到数据库中,它们就会按组合键的顺序插入。因此,例如,如果有3个要插入的平均实体具有以下顺序和组合键: [1, 1], [1, 3], [1, 2] 它们将按组合键的顺序插入,如下所示: [1

我有一个依赖于插入顺序的表(我无法更改的糟糕的遗留设计),并且临时实体以错误的顺序插入。该表被称为“均值”,是“信念”的子实体。当
session.save(信念)时时,动作将级联到子mean实体,该实体存储为信念类中的列表。均值实体以适当的顺序存储在belience.getMeans()列表中,但一旦持久化到数据库中,它们就会按组合键的顺序插入。因此,例如,如果有3个要插入的平均实体具有以下顺序和组合键:

[1, 1], [1, 3], [1, 2]
它们将按组合键的顺序插入,如下所示:

[1, 1], [1, 2], [1, 3]
你知道是什么引起的吗?我以为Hibernate应该根据它们在列表中出现的顺序来插入? 我甚至试着对每个平均实体分别运行session.save(),看看这是否会产生影响,但没有

我感谢你的帮助


编辑:所以我最后做的是在Mean表中添加一个新的列,名为col_index,它保存结果矩阵中平均值的列索引。我将javax.persistence.OrderBy注释与新的col_索引列一起使用,以便以适当的顺序返回平均实体列表。尽管如此,这仍然不能解决插入顺序的问题,我仍然希望得到一个答案。然而,就目前而言,这一解决方案必须足够

如果使用Hibernate注释,则可以使用@OrderBy(“”)注释指定子实体的顺序。请参阅

可能您应该使用单独的属性来自定义排序,并在@OrderBy中使用该属性。

我认为您应该使用而不是

获取集合元素时使用
@OrderBy
注释,但Hibernate不维护顺序


将元素集合索引持久化到指定的顺序列中,然后在获取集合时使用该列。

我可以知道插入顺序如何可靠/对表有何影响吗?插入平均实体的顺序也是决定结果矩阵中平均值的列索引的因素。因此,如果两个实体在插入时切换(如示例中所示),那么这些列将切换。请参阅,这可能会有所帮助-而不是答案,问题指定他在每次插入后使用保存而不是事务来保留顺序,这解释了为什么它在主键上排序,因为它是默认值。但是它怎么能按原来的顺序来订购呢?我在那些文件中看不到这个选项。