表中的行顺序

时间:2012-02-23 14:55:06

标签: java hibernate

我有以下问题:我正在加载一个只有删除和插入的“dif”-table。 “更改”由删除后跟插入确定。

此表没有主键,也没有要排序的字段。我想使用Hibernate来加载这个表。 (SELECT obj FROM MyDifTable obj WHERE obj.group = groupId

现在,我在所有值和上面的查询中使用了一个键,而且我没有按照源表中的顺序获取行。

我的问题是:

  1. 如何让Hibernate始终返回与表中相同的顺序?
  2. 在这种情况下如何指定主键?
  3. 我知道这是一个设计糟糕的东西,我试图与设计团队争论,但没有成功。

    最诚挚的问候, 启

1 个答案:

答案 0 :(得分:3)

关系数据库基于Set理论的一个分支。信息在数据库中(在Set中)或不在。订单不是集合中的概念,只有存在是集合中的概念。这意味着如果需要,您必须明确地对排序进行建模。

如果必须维护订单,则必须添加“order by”子句以对集合的结果成员进行排序。有时候这种排序是外在的(所以你可以推迟排序决定,直到查询提交时间)。在非常罕见的情况下,将该订单内化在“数据集”中非常重要。

在奇数情况下,您需要内化订购,您必须通过将订单与数据一起存储在集合中来实现;但是,为了强制存在“order by”子句(查询编写者可能会省略它),您可能还需要放置一些数据的存储过程/视图,以确保查询始终以正确的顺序返回。

将列表存储到数据库时,内部排序的示例很常见。一个通常将列表项与它的索引一起存储在同一行的列表中。这样,当检索它时,您可以恢复项目订购。