我遇到以下问题:我正在加载仅包含删除和插入的“dif”表。 “更改”由删除后插入来确定。
该表没有主键,也没有可供排序的字段。我想使用 Hibernate 来加载这个表。 (从 MyDifTable obj 中选择 obj,其中 obj.group = groupId
)
现在,我在所有值和上述查询上使用键,但我没有按照与源表中相同的顺序获取行。
我的问题是:
- 如何让 Hibernate 始终返回与表中相同的顺序?
- 在这种情况下如何指定主键?
我知道这是一个设计得很糟糕的东西,我试图与设计团队争论,但没有成功。
最诚挚的问候, 凯
最佳答案
关系数据库基于集合论的一个分支。信息要么在数据库中(在集合中),要么不存在。秩序不是集合中的概念,只有存在才是集合中的概念。这意味着如果需要,您必须显式地对排序进行建模。
如果必须保持顺序,则必须添加“order by”子句来对集合的结果成员进行排序。有时这种排序是外部的(因此您可以延迟排序的决定,直到查询提交时间)。在极少数情况下,将该顺序内化到“数据集”中非常重要。
在奇怪的情况下,您需要内部排序,您必须通过将顺序与集合中的数据一起存储来实现;但是,为了强制存在“order by”子句(查询编写者可能会忽略它),您可能还必须放置一些存储过程/数据 View ,以确保查询始终以正确的顺序返回。
将列表存储到数据库时,内部排序的示例很常见。通常将列表项及其索引存储在列表中的同一行中。这样,当检索它时,您可以恢复项目和排序。
关于java - 表中的行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415404/