三个类:
Order类:private OrderAmount orderAmount;//订单金额对象属性
OrderAmount类:private Double totalAmount;金额属性
               private Payment payment;//支付对象属性
Payment类:private int payId;//id属性
Criteria 的条件查询:
Criteria criteria=session.createCriteria(Order.class);criteria.add(Restrictions.between("orderAmount.totalAmount", order.getOrderAmount().getTotalAmount(), orderModel.getOrderAmount().getTemptotal()));

criteria.add(Restrictions.eq("orderAmount.payment.payId", order.getOrderAmount().getTotalAmount(), orderModel.getOrderAmount().getTemptotal()));
请问各位高手,这样写:Restrictions.between("orderAmount.totalAmount")和Restrictions.eq("orderAmount.payment.payId")是不是错的?要是错的话,那应该怎么写呢? 

解决方案 »

  1.   

    CBQ有很多东西都实现不了,你这样写确实是错的,第一个参数只能是查询类的属性,如果想用他的属性类对象的属性就要继续createCriteria,给你看一下我们的,可以参考一下,最后,如果CBQ实现不了可以使用HQL。Hibernate还是推荐使用HQL的。虽然CBQ用起来更直观简便。Criteria criteria = session.createCriteria(Requirement.class);if (deptId!=null && !"".equals(deptId)) {
    /** 看看这一行会明白吧!这个就是用属性类的属性来过滤,需求有个属性是指派人,指派人有个属性是部门,现在查询的过滤条件是部门,用部门的ID来过滤 */
    criteria.createCriteria("assignor").createCriteria("xtDept").add(Restrictions.eq("deptId", deptId));
    }
    if (status != null) {
    criteria.add(Restrictions.in("status", status));
    }
    if (fromDate!=null && toDate!=null) {
    criteria.add(Restrictions.between("noteDate", fromDate, toDate));
    }