Hibernate的dot-based级联表查询HQL可以算是能够大大提高生产力的特性之一,比如

User (1) —- (1) City

一般会在User对象中维护一个City对象,然后使用以下方式进行查询:

sessionFactory.createQuery("from User where city.name=?").setString(0, "Shanghai")

但是上面的思路在今天使用Criteria时出现了问题,一直报错找不到属性”city.name”。经过再三google,原来是使用Criteria时需要自己维护级联关系,即

Criteria userCriteria = sessionFactory.createCriteria(User.class);
Criteria cityCriteria = userCriteria.createCriteria("city").add(Restrictions.eq("name", "Shanghai");

这个问题搞了一晚上,坑爹啊~