Hibernate的dot-based级联表查询HQL可以算是能够大大提高生产力的特性之一,比如
EOrder (1) —- (1) ECustomer
一般会在EOrder对象中维护一个ECustomer对象,然后使用以下方式进行查询:
session.createQuery("from EOrder where customer.name=?").setString(0,"shanghai");
但是上面的思路在今天使用Criteria时出现了问题,一直报错找不到属性”customer.name”。经过再三google,原来是使用Criteria时需要自己维护级联关系,即
Criteria orderCriteria = session.createCriteria(EOrder.class);
orderCriteria.createCriteria("customer").add(Restrictions.ilike("name","%gg%"));
还有一种解决办法:
Criteria orderCriteria = session.createCriteria(EOrder.class).createAlias("customer","cust")
.add(Restrictions.ilike("cust.name","%d%"));