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]
答案 0 :(得分:0)
看here
规范说你可以通过设置ResultTransformer来实现这一点。
这将是这样的:
manager.getSession()
.createQuery("select user.firstName from User user",Object[].class)
.setResultTransformer(Transformers.aliasToBean(User.class))
.getResultList();