Mar*_*kis 5 java hibernate seam sql-order-by
我有一个搜索屏幕,下面使用JSF,JBoss Seam和Hibernate.有和,列的列A,关系如下:BC
A (1< --; >*) B (1< --; >*) C
Run Code Online (Sandbox Code Playgroud)
假设A有一个List< B >并且B有一个List< C >(两个关系都是一对多).
UI表支持按任何列(ASC或DESC)排序,因此我希望对查询结果进行排序.这就是我在模型中使用Lists的原因.
但是,我得到一个例外,即Hibernate不能急切地获取多个行李(它认为两个行李都是行李).有一个有趣的博客文章在这里,和他们确定了以下解决方案:
我将List更改为Set,顺便提一下,模型方面更正确.
PersistentSetHibernate返回的包装HashSet,没有排序.因此,当我在UI中迭代它时,顺序是随机的,无论数据库的顺序如何.PersistentSet身体包裹LinkedHashSet,里面有订货,并且是我想什么.但是,该OrderBy属性是硬编码的,并且优先于我使用集合(链接)或HQL(链接)设置的任何顺序.因此,我通过UI请求的所有其他排序都在它之后.我再次尝试Sets使用SortedSet(和它的实现TreeSet),但我有一些问题:
我想要在DB中进行排序,而不是在内存中,这是TreeSet通过比较器或通过元素的Comparable接口进行的.
我发现有一个Hibernate注释@Sort,它有一个SortOrder.UNSORTED,你也可以设置一个比较器.我还没有设法让它编译,但我仍然不相信它是我需要的.
其中一个要求是在DB中进行排序.
创建了一个简单的Maven项目并将其作为Google Code项目提交.这是我个人解决问题的方法.
当相同的结果集可以按任何列重新排序时,在数据库中排序的意义何在?如果每次在 UI 上单击不同的列时都需要访问数据库,那么您只会给自己带来性能问题。当在内存中对集合进行排序有意义时,情况正是如此。
关于包和列表,Hibernate 博克是这么说的:
袋子可能无法分类(不幸的是
TreeBag,没有分类),列表也不能分类;列表元素的顺序由列表索引定义。
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |