条件和 HQL 如何查询返回值



>伙计们,我想问你一个简单的问题。 我正在创建两个相同的查询,一个带有条件,另一个带有 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>的消息。 我想知道为什么标准可以返回整个对象(内部为 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]

看这里

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

它会是这样的:

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

最新更新