Hibernate SQLQuery,如何获取数组和行对象?

时间:2012-04-05 12:19:38

标签: arrays hibernate postgresql collections row

Hibernate 3.6& postgresql 9.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);

大多数使用hibernate Entities& amp;注释。 但是对于一些统计任务更容易使用HQL甚至SQL。 与hibernateSQL中的纯JDBC相反,使用数组并不是那么直观。

JDBC可以是一个解决方案,但我还没有找到任何方法从Hibernate Session或Connection获取JDBC Statement。 ResultTransformer也没有帮助,但失败了:

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

1 个答案:

答案 0 :(得分: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]
    ..
    ..
 }