2012-08-23 33 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註釋功能的可能性」。 –