2012-08-23 22 views
1

我有目前这样的映射:休眠设置,并在我的实体排序问题

private Set<Sth> sths; 

所以,当我使用criteria.addOrder(Order.asc(Sth.ID))

然后冬眠生成与order by id asc查询,但在集合 的元素进行排序(我遍历它们来检查) - 我认为,在这种情况下,Hibernate会使用某种类型的有序集合实现的(我不想要的数据总是排序)。

但是,如果使用..

@OrderBy(Sth.ID) 
private Set<Sth> sths; 

Hibernate会产生完全相同的SQL查询,但数据进行排序这段时间。 所以我的问题是 - 它是一个错误?我正在使用休眠3.4。

使用排序依据注解是我可以接受的,但也许我不希望做这个属性总是排序,所以我宁愿给排序在条件查询指令比注解。

任何想法?它在高级版本的hibernate中是否以相同的方式工作?

+0

请将由休眠生成的完整查询 – esmoreno

+0

这是公司的生产代码。但看起来像这样select FIRST_ENTITY的所有 this_ left outer join SECOND_ENTITY entity_ on this_.id = entity_.id 其中 order by entity_.id asc - sql查询在两个案件 –

+0

请参阅此链接:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html#collections-sorted – esmoreno

回答

0

Readed在http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html#collections-sorted

协会甚至可以通过使用集合filter()在运行时任意的标准来排序:

sortedUsers = s.createFilter(group.getUsers(), "order by this.name").list(); 

其中group.getUsers()是你查询的结果。

Regards

+0

是的,但后来我不得不称之为的每一个元素在我的以前返回列表。根据你的例子,我有一个列表。这不是我确切需要的。我需要的是让我们说“有条件地打开@OrderBy注释功能的可能性”。 –