在Hibernate中订购集合的最佳方法是什么?

时间:2012-06-22 15:48:25

标签: hibernate list set bag

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

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

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

我看了Bag,但我不确定如何将sortOrder属性放入定义中,我有点担心它允许重复。我仍然希望有与我设置时相同的约束(我相信父/子元组总是唯一的)。

连连呢?我可以调整Bag以使其作为带有sortOrder的List而不是带有索引的List吗?我还需要做些什么来保护代码不被SQL直接输入的数据挂起?

2 个答案:

答案 0 :(得分:1)

在我正在进行的项目中,我也有同样的问题。我能做的最后一点是使用数据库触发器来保持这个位置数据的正确顺序。触发器获取列表中的记录并将它们排列正确并更新位置。

我不认为你有任何其他选择,因为你正在使用sql和hibernate来改变数据。

答案 1 :(得分:0)

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

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