2013-03-22 50 views
1

我在休眠中使用本機查詢,它會返回我的id列表。我想將這個列表轉換爲整數列表。但它不起作用,給我看例外。休眠本機查詢返回整數列表不工作

public List<Integer> fethcSurvayIdOnCount(){ 
      HibernateCallback action = new HibernateCallback() { 
      public Object doInHibernate(Session session) 
      throws HibernateException, SQLException { 
     String hq = "select id from tb_abc where age='10'" ; 

     SQLQuery query = (SQLQuery) session 
       .createSQLQuery(hq) 
       .setResultTransformer(
         Transformers 
           .aliasToBean(Integer.class)); 

     return query.list(); 
    } 
    }; 
    return (List<Integer>) getHibernateTemplate() 
     .execute(action); 
    } 

這裏是例外

org.springframework.orm.hibernate3.HibernateSystemException: Could not find setter for id on class java.lang.Integer; nested exception is org.hibernate.PropertyNotFoundException: Could not find setter for id on class java.lang.Integer 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676) 
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424) 
    at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339) 
+0

什麼是ID這裏 – PSR 2013-03-22 14:17:46

回答

1

這個排隊很容易。首先,如果你使用本地SQL,返回的結果集對象數組,每個陣列中的第一個元素是值你的ID,所以該方法的返回值應該是列表,這裏是一個例子:

public List<Object[]> getIds(){ 

    String hq = "select id from tb_abc where age='10'" ; 
    List<Object[]> results = session.createSQLQuery(hq).list(); 

    return results; 

}

後得到的結果,你可以得到你的期望值像以下:

for(Object[] obj : results) { 
    Integer id = Integer.valueOf(obj[0].toString()); 
    // do sth 
} 
+0

我試過這個第一,但後來我做了我的答案是簡單。 – 2015-08-25 14:47:30

0

的問題來自於您的Transfomer。當你正在請求一個特定的字段時,你從列表中獲得的方法是List<Object[]>,你的變換器試圖將這些對象映射到一個整數,但是基於屬性的別名(在你的情況下是「id」),並假設你的類指定的是一個bean(因此方法aliasToBean的名稱),其中Integer不是。

您可能需要遍歷查詢返回的列表以獲取正確的類型(這是變壓器在引擎蓋下的功能)。

1

這是更好的。不進行從對象需要整型在一個循環:

public List<Integer> getIds(){ 

    String hq = "select id from tb_abc where age='10'" ; 
    List<Integer> results = session.createSQLQuery(hq).list(); 

    return results; 
} 

我使用Hibernate 4.3