2012-04-05 6 views
3

Hibernate 3.6 & postgresql 9.1。 SQLQueryを使用して結果配列データを取得する方法(ロングアシスタント、「テキスト、ロング、タイムスタンプ」の行の配列 - アカウント)?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ステートメントを取得する方法が見つかりませんでした。 ResultTransformerも、で失敗助けにはならない:あなたのような何かを行うことができますこれは何

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

を参照することにより

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

答えて

4

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] 
    .. 
    .. 
}