" org.hibernate.QueryException:无法解析属性"按非PK列排序

时间:2015-04-10 19:54:30

标签: hibernate api sorting criteria

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

1 个答案:

答案 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;
}