第一:我認爲你說的是兩個實體之間的關係。類似於
@Entity
public class A {
@ManyToMany
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "A_fk") }, inverseJoinColumns = { @JoinColumn(name = "B_fk") })
private Set<B> bSet = new LinkedHashSet<B>();
}
Hibernate並不保留訂單本身!
如果在實體A
從數據庫加載看看使用的類,然後Set
bSet
是PersistentSet
類型,這是周圍其他Set
包裝的,這是(對我來說)正常HashSet
。 (HashSet
不保留其元素的順序。)
即使使用休眠或List
LinkedHashSet
,它仍然是不可取的基礎自然(非保證)數據庫順序執行。對於MySQL來說,它是某種反模式。
但是,您可以使用@Sort
註釋(org.hibernate.annotations.Sort
)使您的排序明確。例如:
@OneToMany(mappedBy = "as")
@Sort(type = SortType.COMPARATOR, comparator = MyBComparator.class);
public SortedSet<C> cs;
@see:Ordering return of Child objects in JPA query
添加人盧卡斯Rzeszotarski於2012年9月1日:
但我們必須記住,使用@Sort
註釋導致分揀對象內存(jvm),而不是在SQL中。相反,我們可以使用@OrderBy
註釋來導致sql服務器端的排序。這兩個註釋在我的(ŁukaszRzeszotarski)意見中有一個缺點,即默認設置了排序。我(ŁukaszRzeszotarski)寧願hibernate使用自己的LinkedHashSet實現,當它'看到'使用order by子句時。
@see:Hibernate ordering in sql
您是否嘗試使用@OrderColumn註釋? (也許這是一個JPA註釋) – willcodejavaforfood 2010-11-22 09:36:34