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

时间:2015-05-12 04:35:20

标签: java hibernate jpa orm

我有一个依赖于插入顺序的表(我无法改变的糟糕遗留设计),并且正在以错误的顺序插入瞬态实体。该表格被称为“平均值”。这是“信仰”的儿童实体。当调用session.save(belief);时,该动作将级联到子均值实体,该实体将作为列表存储在信念类中。均值实体以相应的顺序存储在belief.getMeans()列表中,但一旦持久存储到数据库,它们将按其复合键的顺序插入。例如,如果有3个Mean实体要插入以下顺序和复合键:

[1, 1], [1, 3], [1, 2]

它们将按复合键排序,如下所示:

[1, 1], [1, 2], [1, 3]

有什么可能导致这个的想法吗?我认为Hibernate应该根据它们在List中出现的顺序插入? 我甚至尝试在每个Mean实体上单独运行session.save()以查看是否会产生影响,但它没有。

感谢您的帮助!

编辑:所以我最终做的是在Mean表中添加一个名为col_index的新列,该列保存结果矩阵中Mean的列索引。我使用了新的col_index列的javax.persistence.OrderBy注释,因此List of Mean实体以适当的顺序返回。虽然,这仍然无法解决插入顺序问题,我仍然希望得到答案。但是现在,这个解决方案必须满足要求。

2 个答案:

答案 0 :(得分:1)

我认为你应该使用@OrderColumn而不是@OrderBy

在获取Collection元素时使用@OrderBy注释,但Hibernate不维护该命令。

@OrderColumn allows Hibernate将元素Collection索引持久保存到指定的order列中,然后在获取集合时使用该列。

答案 1 :(得分:0)

如果您使用的是Hibernate注释,则可以使用@OrderBy("")注释来指定子实体的顺序。请参阅this.

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