我有一个依赖于插入顺序的表(我无法更改的糟糕的遗留设计)并且以错误的顺序插入 transient 实体。有问题的表称为“平均值”,它是“信念”的子实体。当 session.save(belief);
被调用时,该操作被级联到子均值实体,这些实体作为列表存储在信念类中。 Mean 实体以适当的顺序存储在 belief.getMeans() 列表中,但是一旦持久化到数据库中,它们就会按照其复合键的顺序插入。例如,如果有 3 个 Mean 实体要按以下顺序和复合键插入:
[1, 1], [1, 3], [1, 2]
它们将按照复合键的顺序插入,如下所示:
[1, 1], [1, 2], [1, 3]
知道是什么原因造成的吗?我认为 Hibernate 应该根据它们在列表中出现的顺序插入? 我什至尝试在每个 Mean 实体上单独运行 session.save() 以查看这是否会有所作为,但没有。
感谢您的帮助!
编辑:所以我最后做的是在 Mean 表中添加一个名为 col_index 的新列,它在结果矩阵中保存 Mean 的列索引。我将 javax.persistence.OrderBy 注释与新的 col_index 列一起使用,因此平均实体列表以适当的顺序返回。虽然,这仍然不能解决插入顺序问题,但我仍然想得到一个答案。但是就目前而言,这个解决方案已经足够了。
最佳答案
我认为你应该使用 @OrderColumn而不是 @OrderBy .
@OrderBy
注释在获取 Collection 元素时使用,但顺序不由 Hibernate 维护。
@OrderColumn
allows Hibernate将元素集合索引持久化到指定的顺序列中,然后在获取集合时使用。
关于java - Hibernate 对具有复合键的子实体执行错误的插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181867/