2011-02-10 14 views

risposta

9

Informazioni su concat: funziona esattamente allo stesso modo in MySQL (concatena stringhe, non è una funzione di aggregazione).

È possibile aggiungere group_concat come una funzione sql alla configurazione. In questo modo si presuppone che il DB sottostante conosca questa funzione e si leghi il programma a MySQL.

import org.hibernate.cfg.Configuration; 
import org.hibernate.dialect.function.StandardSQLFunction; 
import org.hibernate.type.StringType; 

// ... 
myConf.addSqlFunction("group_concat", new StandardSQLFunction("group_concat", new StringType())); 

È inoltre indicano che l'uscita della funzione è una stringa. Senza questo quando i campi numerici group_concat Hibernate presuppongono che il risultato sia numerico e crash.

+3

+1 per aver menzionato te stesso a mysql. group_concat non è disponibile in, ad esempio, Microsoft SQL Server. Hibernate mira a essere indipendente dal produttore sql. – Terraego

1

sottoclasse dialetto

e

registerFunction("group_concat", new StandardSQLFunction("group_concat", Hibernate.STRING)); 

o utilizzare SQLFunctionTemplate

1

Se si utilizza createSQLQuery, utilizzare addScalar a quella colonna come stringa.

SQLQuery query = sessionObj.createSQLQuery("select group_concat(column1,column2) as mycolumn from some table group by someThing"); 
query.addScalar("mycolumn ", Hibernate.STRING); 
+0

'Hibernate.STRING' è stato deprecato da Hibernate versione 3.6.X [Ecco il documento deprecato] (https://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Hibernate.html) , quindi devi usare 'StringType.INSTANCE'. –