2012-04-05 2 views
3

Hibernate 3.6 & postgresql 9.1. Verwenden von SQLQuery, wie Sie Ergebnisarraydaten erhalten (Array von Long - Assistenten, Array von Zeilen von "Text, Long, Timestamp" - Konten)?Hibernate SQLQuery, wie Arrays und Zeilen Objekte zu bekommen?

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); 

Die meisten DAO-Funktionen mit Hibernate Entities geschrieben & Anmerkungen. Aber für ein paar Statistikaufgaben einfacher mit HQL oder sogar SQL zu arbeiten. Im Gegensatz zu reinen JDBC in HibernateSQL ist das Arbeiten mit Arrays nicht so intuitiv.

JDBC könnte eine Lösung sein, aber ich habe keine Möglichkeit gefunden, JDBC-Anweisung von Hibernate Sitzung oder Verbindung zu erhalten. ResultTransformer nicht auch hilft, schlägt mit:

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

Antwort

4

dieser

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

Unter Bezugnahme Was Sie wie etwas tun;

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

und dann

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