Criteria和HQL查询如何返回值

时间:2018-05-08 14:50:43

标签: java hibernate

我想问你一个简单的问题。 我创建了两个相同的查询,一个带有条件,另一个带有HQL。

HQL示例

@Override
public List<Object[]> getAllLoginHQL() {
    Query<Object[]> query = manager.getSession()
            .createQuery("select user.firstName from User user",Object[].class);
    return query.getResultList();
}

标准示例:

@Override
public List<User> getAllLoginCriteria() {
    Criteria criteria = manager.getSession()
            .createCriteria(User.class)
            .setProjection(Projections.projectionList()
                    .add(Projections.property("firstName"), "firstName"))
            .setResultTransformer(Transformers.aliasToBean(User.class));

    return criteria.list();
}

正如您所看到的,两个查询都做同样的事情,但是当我尝试使用返回类型List<User>创建HQL查询时,我得到了一个异常,其中包含此查询的返回类型为List<String>的消息。 我想知道为什么Criteria可以返回整个对象(内部为null),即使我要求一个/两个列并且HQL只返回特定的列?

此HQL查询提供了异常

@Override
public List<User> getAllLoginHQL() {
    Query<User> query = manager.getSession()
            .createQuery("select user.firstName from User user",User.class);
    return query.getResultList();
}

异常消息:

Type specified for TypedQuery  is incompatible with query return type [class java.lang.String]

1 个答案:

答案 0 :(得分:0)

here

规范说你可以通过设置ResultTransformer来实现这一点。

这将是这样的:

   manager.getSession()
            .createQuery("select user.firstName from User user",Object[].class)
            .setResultTransformer(Transformers.aliasToBean(User.class))
            .getResultList();