簡體   English   中英

條件和HQL查詢如何返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM