【发布时间】:2018-10-18 13:48:47
【问题描述】:
伙计们,我想问你一个简单的问题。 我创建了两个相同的查询,一个带有条件,一个带有 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]
【问题讨论】: