2011-04-06 50 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