在许多 Web 应用程序中,一个非常常见的用例是域对象可以由用户在 Web 界面中排序 - 并且该顺序会保留以备后用;但我注意到,每次我需要实现它时,我总是会想出一个不同的解决方案,并为一个简单的域对象增加相当大的重量和复杂性。例如,假设我有持久实体 Person
Person {
long id
String name
}
用户转到 /myapp/persons
并按照他们收到补偿(或其他东西)的顺序查看系统中的所有人 - 所有的人都可以点击并拖放到另一个位置——当页面再次加载时,顺序被记住。问题是关系数据库似乎没有很好的方法来做这件事; ORM 也不行(我用的是 hibernate)
我一直在考虑一种通用的排序方法 - 但会有一些开销,因为数据将单独保存,这在某些用例中可能会减慢访问速度。我的问题是:有没有人想出一种真正好的方法来为持久域对象的顺序建模?
我在使用 Hibernate 或 JDBCTemplate 的 JavaEE 中工作 - 因此任何代码示例都将以这些技术为基础最有用。或者任何概念性想法也将受到欢迎。
更新:我不确定哪里出了问题,但似乎我不清楚,因为大多数人的回答与我的问题并不完全匹配(因为它在我的脑海中)。问题不在于我在获取行或列时如何对它们进行排序——而是域对象的顺序发生了变化——有人单击并将“人”从列表底部拖到列表顶部——它们会刷新页面和列表现在按照他们指定的顺序排列。
最佳答案
获取结果时,只需根据用户上次使用的内容,使用不同的 ORDER BY 子句构建 HQL 查询
关于java - 持久化有序域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017722/