CreateAlias方法并不返回新的Criteria,而createCriteria会返回新的Criteria,也就是说:
DetachedCriteria dc = DetachedCriteria.forClass(EmApply.class); //root
//此处接近着调用add(),alias 就会指向type,因为当前的Criteria的实例是新建的
dc.createCriteria("emApplyType","type").add(Restrictions.sqlRestriction("{alias}.typeName like '%xx%'"));
createCriteria 使用于多级实体对象查询,比如 EmApply类的emApplyType 属性还关联了另一个实体对象,
单纯的像一下这样用,两方法没什么太大的区别:
DetachedCriteria dc = DetachedCriteria.forClass(EmApply.class); //root
dc.createCriteria("emApplyType","type"); //没有紧跟着add()方法,在下边的查询中,也可以用type这个别名.
dc.createAlias("org", "o");
dc.add(Restrictions.eq("type.id", Long.parseLong(applyType+"")));
dc.add(Restrictions.eq("o.id", Long.parseLong(applyType+"")));