2012-04-05 3 views
3

Hibernate 3.6 & postgresql 9.1. Utilisation de SQLQuery pour obtenir des données de tableau de résultats (tableau d'assistants longs, tableau de rangées de "texte, long, timestamp" - comptes)?Hibernate SQLQuery, comment obtenir des tableaux et des objets lignes?

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

La plupart des fonctions de mise en veille prolongée DAO écrites avec les entités & annotations. Mais pour quelques statistiques des tâches plus faciles à travailler avec HQL ou même SQL. Contrairement à JDBC pur dans HibernateSQL, travailler avec des tableaux n'est pas si intuitif. JDBC pourrait être une solution, mais je n'ai trouvé aucun moyen d'obtenir une instruction JDBC à partir d'une session ou d'une connexion Hibernate. ResultTransformer ne permet pas non plus, échoue avec:

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

Répondre

4

En se référant cette

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

Qu'est-ce que vous pouvez faire quelque chose comme;

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

puis

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