Hibernate3条件查询选择了太多字段

时间:2016-10-13 11:33:37

标签: mysql hibernate hibernate-criteria

我想编写一个简单的查询来检索USER列表,对CUSTOMER连接表有一个简单的限制。 我只对USER实体感兴趣。

如果我使用HPQL编写它:

public List<Users> getAssociatedAdminObs(Integer pCustId) {
    Criteria crit = getCriteriaForObsAdmin("USER");
    crit.createCriteria("clients").add(Restrictions.eq("idCustomer", pCustId));
    return crit.list();
    StringBuilder hqlQuery = new StringBuilder().append("select u from Users as u join u.customers as c where c.idCustomer=:idCustomer");
    Query q = getSessionAndManageFilter().createQuery(hqlQuery.toString());
    q.setInteger("idCustomer", pCustId);
    return q.list();        
}

仅生成的SQL按预期选择USER实体中的所有字段。

现在,如果我通过Hibernate条件API编写它:

public List<Users> getAssociatedAdminObs(Integer pCustId) {
    Criteria crit = getSession().createCriteria(Users.class);
    crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    crit.createCriteria("customers").add(Restrictions.eq("idCustomer", pCustId));
    return crit.list();
}

生成的SQL从USER实体中选择所有字段,也从CUSTOMER实体中选择。

我正在使用hibernate-core 3.3.1.GA。

我知道我可以使用投影解决问题,但我的对象将是暂时的,我也验证了它使用子查询来实现我的限制。

但是我对使用变通办法并不满意,我不明白为什么它们在两个代码示例之间会有不同的行为?

选择被询问实体以外的字段对我没有意义。

0 个答案:

没有答案