我有一个依赖于插入顺序的表(我无法改变的糟糕遗留设计),并且正在以错误的顺序插入瞬态实体。该表格被称为“平均值”。这是“信仰”的儿童实体。当调用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实体以适当的顺序返回。虽然,这仍然无法解决插入顺序问题,我仍然希望得到答案。但是现在,这个解决方案必须满足要求。
答案 0 :(得分:1)
我认为你应该使用@OrderColumn而不是@OrderBy。
在获取Collection元素时使用@OrderBy
注释,但Hibernate不维护该命令。
@OrderColumn
allows Hibernate将元素Collection索引持久保存到指定的order列中,然后在获取集合时使用该列。
答案 1 :(得分:0)
如果您使用的是Hibernate注释,则可以使用@OrderBy("")注释来指定子实体的顺序。请参阅this.
可能您应该使用单独的属性来自定义排序并使用@OrderBy中的属性。