2009-09-09 61 views
1

是否有Hibernate配置(希望在類映射的@Column字段上有一個註釋),它允許我在會話時對該實體的給定列與負載實體關聯的實體集合進行排序。 load(Entity.class,Id)被調用?Hibernate實體排序列配置

例如,如果我有一個EntityA包含OneToMany關聯到EntityB。

@Entity 
public class EntityA { 
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
    private Set<EntityB> headlines = new TreeSet<Entity>(); 

} 

我希望EntityB在從Hibernate返回的Set中排序。

回答

8

session.load()加載單個實體實例。不涉及分揀。 (基於問題編輯)

更新

@OrderBy("column_name")可用於由給定列實體內收集元素進行排序;然而,只有有意義維持它們的順序集合(如列表,而不是設置):

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@OrderBy("name") 
private List<EntityB> headlines = new ArrayList<Entity>(); 
+0

我用的SortedSet和使用的@Sort註釋(但有人在計算器認爲這是一個不好回答,任何想法,爲什麼?) – Dougnukem 2009-09-12 18:46:22

+1

@Dougnukem我知道這是一箇舊帖子,但希望這可以幫助別人:'@ Sort'是一個'壞'的想法,因爲排序發生s在應用程序服務器上。通過'@ OrderBy',列表在數據庫服務器上排序。通常最好讓數據庫處理排序,因爲它是它的優勢之一。 – egallardo 2013-05-15 23:16:51

0

號,只可以選擇在集合級別(@OrderBy)或通過量HQL或標準API訂貨。

1

Session.load不會加載列表,只會加載一個對象。

當您通過在條件上使用addOrder()方法從數據庫中檢索實體時,您可以對實體進行排序。

如果你有孩子列表的父類,你可以訂購與@OrderBy註釋的兒童(見Hibernate Annotations - Collections

1

我用@Sort和SortedSet的集合映射我的協會,要求我的實體實現Comparable接口(INT的compareTo(T)方法)。

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@Sort(type=SortType.NATURAL)  
private SortedSet<Entity> headlines = new TreeSet<Entity>(); 
+0

爲什麼這是一個不好的解決方案? – Dougnukem 2009-09-12 18:45:28

+0

如果'headlines'在內存中創建,這不是一個不好的解決方案。每個場景都是不同的,但通常情況下,如果它是從數據庫加載的,則出於性能原因,您希望讓數據庫爲您排序。 – egallardo 2013-05-15 23:23:32