2012-04-05 18 views
3

Hibernate 3.6 & postgresql 9.1。 使用SQLQuery如何獲取結果數組數據(Long - 助手數組,行數爲「Text,Long,Timestamp」 - accounts)?Hibernate SQLQuery,如何獲取數組和行對象?

limit = 10000; 
    final SQLQuery sqlQuery = getSession().createSQLQuery("SELECT id, name, ts, " + 
      " array(SELECT assistant_id FROM user_assistant WHERE p_id=pr.id ORDER BY assistant_id) AS accounts," + 
      " array(SELECT row(type,uid,ts) FROM user_account WHERE p_id=pr.id ORDER BY type) AS accs," + 
      " FROM profile pr WHERE ts > ? ORDER BY ts LIMIT " + limit); 

最具有休眠實體&註釋寫DAO功能。 但是對於一些統計任務來說,使用HQL甚至SQL更容易。 與hibernateSQL中的純JDBC相反,使用數組並不那麼直觀。

JDBC可能是一個解決方案,但我還沒有找到任何方法從Hibernate Session或Connection獲取JDBC Statement。 使用ResultTransformer不也有幫助,失敗:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003 

回答

4

通過參照該

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html

你可以做些什麼事情等;

session.createSQLQuery("Your custom query") 
.addScalar("field1", Hibernate.STRING) 
.addScalar("field2", Hibernate.STRING) 
.addScalar("field3", Hibernate.STRING) 

然後

for(Object rows : query.list()){ 
    Object[] row = (Object[]) rows; 
    String field1 = row[0] // contains field1 
    String field2 = row[1] 
    .. 
    .. 
}