0

我有一个 Hibernate 中一个类的子值列表。我最初的实现是一个 Set,但它以本质上是“数据库顺序”的方式返回值(可能基于聚集索引,这几乎是插入顺序)。

我看着切换到 List,所以我添加了一个,但我很快遇到了一个问题,即返回的 java List 中有空值。我的一些数据是用 Hibernate 写的,但也有一些是用 SQL 脚本写的。

我想要的是一个与列表中的位置无关的 sortOrder 属性,因此如果有重复,即 { 1, 3, 3, 10 } 它会适当地映射到 { 0, 1, 2, 3 } 其中第 2 项和第 3 项的顺序回退到数据库顺序。空值也很好,我不在乎它们是放在列表的前面还是后面(只要行为一致)。

我查看了 Bag,但不确定如何将 sortOrder 属性添加到定义中,而且我有点担心它是否允许重复。我仍然希望拥有与使用 Set 时相同的约束(我相信父/子元组始终是唯一的)。

建议?我可以调整 Bag 以使其充当带有 sortOrder 的列表而不是带有索引的列表吗?我还需要做什么来保护代码不被 SQL 直接输入的数据挂起?

4

2 回答 2

1

在我正在从事的项目中,我也遇到了同样的问题。我能想到的最后一个办法是使用数据库触发器来保持这些位置数据的正确顺序。触发器获取列表中的记录并将它们排列在正确的位置并更新位置。

当您使用 sql 和 hibernate 更改数据时,我认为您不会有任何其他选择。

于 2012-06-22T16:13:00.927 回答
0

如果您使用的是休眠注释,则可以使用javax.persistence.OrderBy通过指定属性对“内存中”的元素进行排序,而无需引入索引列,请参阅:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-collection

于 2012-06-22T17:42:45.780 回答