命令是否可以通过父母的属性和孩子的属性来订购父对象的集合?父母和孩子使用JPA
比方说,我有了这段代码的实体类:
@OrderBy("age")
public List<Father> getFathers() {
return fathers;
}
父实体,我们希望通过提升年龄订购(如上图所示),年龄属性。
父亲可以有一个孩子。一个孩子也会有一个年龄属性。我想getFathers()
返回一个父亲名单,使他们是由父亲的年龄,然后随着儿童的年龄上升。
如果我保持上面的代码是正确的,那么父亲将按照他们自己的年龄正确排列,但有一个10岁儿童的父亲(30岁)可以在父亲(也是30岁)之前来到5年老孩子。
我试图做这样的事情:
@OrderBy("age, child.age")
public List<Father> getFathers() {
return fathers;
}
但我会得到以下异常:
org.hibernate.AnnotationException: property from @OrderBy clause not found: Father.child.age
编辑:对不起,让我有更多的代码澄清。 getFathers()
不在Child实体中,但在另一个实体中。我们称之为村:
@Entity
public class Village {
...
@OneToMany(mappedBy = "village",
targetEntity = Father.class)
@OrderBy("age")
public List<Father> getFathers() {
return fathers;
}
}
所以,假设有一个村庄,你可以得到这个村庄的父亲。为了这个例子的缘故,让我们说一个奇怪的村庄规则的父亲每个只能有一个孩子。
所以父亲会是这个样子:
@Entity
public class Father {
private Child child;
...
@OneToOne(mappedBy = "father")
public Child getChild() {
return child;
}
public void setChild(Child child) {
this.child = child;
}
}
所以现在在原有村级,我想getFathers()
返回所有的父亲在年龄顺序,再加上,如果有具有相同的任何父亲年龄,我希望他们在他们的孩子的年龄之后被下令。
编辑2:我还发现,我可以得到的,但是我想它不可能是这样做的最优雅的方式效果:
session.createFilter(village.getFathers(), "order by child.age");
用映射的属性显示您的两个类。为简洁起见,请省略其他属性。 – 2010-11-15 04:20:55
当然!你可以用'Filter'来完成,但是你仍然需要'Father'类中的'child'属性。 – 2010-11-18 04:58:34