设置了hibernate关联映射.public class A{
   private B b;
   private String aname;
   ...
}
public class B{
   private String bname;
   ...
}
一般情况下:
Criteria c= sess.createCriteria(A.class) 
c.add(Restrictions.like("aname","XXX");
c.list();
我想通过B类型的b属性 查询A的数据,用Criteria应该如何写?(设置了hibernate关联映射.)
Criteria c= sess.createCriteria(A.class) 
c.add(Restrictions.like("b.bname","XXX");//这样写就报错.
c.list();麻烦大家帮我瞅瞅. 先谢谢了.

解决方案 »

  1.   

    你应该用"A.b.bname",这样应该可以!
      

  2.   

    用A的属性  b  再是 b的属性
      

  3.   

       <many-to-one name="cstCustomer" class="entity.CstCustomer" fetch="select">
                <column name="lst_cust_id" not-null="true" />
       </many-to-one>
    Session session=super.getSession();
    Criteria c=session.createCriteria(CstLost.class);
    CstLost obj=page.getObj();
    if(null!=obj&&null!=obj.getCstCustomer())
    {

         if(null!=obj.getCstCustomer().getCustName()&&!"".equals(obj.getCstCustomer().getCustName()))
    c.add(Restrictions.like("cstCustomer.custName",obj.getCstCustomer().getCustName(),MatchMode.ANYWHERE));}
      c.addOrder(Order.asc("lstStatus"));
    if(null!=page.getOrderBy()&&!"".equals(page.getOrderBy()))
      c.addOrder(Order.asc(page.getOrderBy()));
    return super.packing(c, page);
      

  4.   

    "CstLost.cstCustomer.custName"改这样还是报错.org.hibernate.QueryException: could not resolve property: CstLost of: entity.CstLost
      

  5.   

    如果你的custName是主键的话,通过c.add(Restrictions.like("b.bname","XXX");
    是可以查询得到结果的,但如果是非主键的话,就会报错了
    org.hibernate.QueryException: could not resolve property: entity.CstLost of: