如何在休眠标准中订购oneToMany连接表

时间:2011-04-06 00:03:26

标签: hibernate criteria

假设我有一个母亲,她有一个toToMany映射到小猫

@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

的顺序

我还尝试在Kitten @OneToMany(...等)下添加@OrderBy(value =“kittenName”)注释,该注释可以正常使用,直到您使用条件API,此顺序将在任何其他订单语句之前sql。

提前为任何帮助干杯......

1 个答案:

答案 0 :(得分:68)

您需要将@javax.persistence.OrderBy注释添加到kittens列表中。

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

@See