2011-04-06 82 views
28

說我有一個一流的母親與一對多映射到小貓你如何訂購一對多休眠標準連接表

@Entity 
@org.hibernate.annotations.Entity(dynamicUpdate = true) 
@Table(name = "Mother") 

..... 

@OneToMany(fetch = FetchType.LAZY, targetEntity=Kittens.class, cascade=CascadeType.ALL) 
@JoinColumn(name="motherId") 
private List<Kittens> kittens; 

我使用的是標準的API來提供一個列表

Criteria criteria = this.getSession().createCriteria(Mother.class); 
Criterion MotherType = Restrictions.eq("type", "domesticated"); 
criteria.add(MotherType) 
.addOrder(Order.asc("motherName")) 
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 
.setFetchMode("kittens", FetchMode.JOIN) 
// .addOrder(Order.asc("kittens.kittenName")); 
List test = criteria.list(); 

工作正常,直到我嘗試添加小貓字段的序號kittenName

我也嘗試在@ Kitto @ OneToMany(...等)下添加@OrderBy(value =「kittenName」)註釋, ks罰款,直到您使用標準API,並且此命令將在sql中的任何其他命令語句之前。

乾杯提前任何幫助...

回答

51

您需要的@javax.persistence.OrderBy註釋添加到您的kittens列表。

@OneToMany(fetch = FetchType.LAZY, 
      targetEntity=Kittens.class, 
      cascade=CascadeType.ALL) 
@JoinColumn(name="motherId") 
@OrderBy("kittenName") 
private List<Kittens> kittens; 

@see

+0

Hi Ralph。我已經嘗試過,但生成的SQL將Mothername順序之前的kittenName順序。即選擇... order by kittens.kittenName asc,mother.motherName asc。我試圖通過mother.motherName asc,kittens.kittenName asc來完成訂單。謝謝 – jaseFace 2011-04-06 11:46:27

+0

@ user456147:看來我真的不明白你想做什麼?按什麼順序加載?什麼不像你想要的?如果我沒有說清楚, – Ralph 2011-04-07 06:31:24

+0

道歉。我想通過MotherName然後命名KittenName。如果我將OrderBy放在Kitten實體上,訂單是另一回合。 – jaseFace 2011-04-07 14:29:26