[英]How does Criteria and HQL query return values
伙計們,我想問一個簡單的問題。 我創建了兩個相同的查詢,一個使用條件,一個使用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),即使Im請求一兩個列,而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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.