Class A {
private long id; //PK
private B b; // FK many-to-one
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public B getB() {
return this.b;
}
public void setB(B b) {
this.b = b;
}
}
Class B {
private String code; // PK
private String name;
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
检索A对象列表并按b.code或b.name排序,如下所示
public List<A> loadListOfAs(final Integer id) {
final DetachedCriteria criteria = DetachedCriteria.forClass(A.class);
criteria.add(Restrictions.eq("id", id));
//criteria.addOrder(Order.asc("b.code")); -- uncommenting this line and deleting the line below works
criteria.addOrder(Order.asc("b.name")); // Using this line errors out
final List<A> returnList = findByCriteria(criteria);
return returnList;
}
按b.code排序有效但按b.name排序会引发以下情况 org.hibernate.QueryException:无法解析属性:b.name of:A
答案 0 :(得分:0)
所以这就是达到这个目标的标准 -
public List<A> loadListOfAs(final Integer id) {
final DetachedCriteria c1= DetachedCriteria.forClass(A.class);
c1.add(Restrictions.eq("id", id));
DetachedCriteria c2 = c1.createCriteria("b");
c2.addOrder(Order.asc("name"));
final List<A> returnList = findByCriteria(c1);
return returnList;
}