3

Hibernate3.6およびpostgresql9.1。SQLQueryを使用して、結果の配列データ(Longの配列-アシスタント、「Text、Long、Timestamp」の行の配列-アカウント)を取得する方法は?

    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セッションまたは接続からJDBCステートメントを取得する方法が見つかりませんでした。ResultTransformerも役に立ちませんが、次の場合に失敗します。

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

1 に答える 1

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]
    ..
    ..
 }
于 2012-04-30T08:26:26.927 に答える