2011-02-10 32 views

Respuesta

9

Acerca de concat: funciona exactamente de la misma manera que en MySQL (concatena cadenas, no es una función de agregado).

Puede agregar group_concat como función SQL a su configuración. De esta forma, asume que la base de datos subyacente conoce esta función y vincula su programa al 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())); 

También indica que la salida de la función es una cadena. Sin esto cuando group_concat campos numéricos, Hibernate asumirá que el resultado también será numérico y se bloqueará.

+3

+1 por mencionar que te atas a mysql. group_concat no está disponible en, digamos, microsoft sql server. hibernate apunta a ser un proveedor de SQL independiente. – Terraego

1

subclase el dialecto

y

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

o utilizar SQLFunctionTemplate

1

Si está utilizando createSQLQuery, utilice addScalar a la columna como de cadena.

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' ha quedado en desuso desde la versión 3.6.X de Hibernate [Aquí está el documento en desuso] (https://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Hibernate.html) , entonces tienes que usar 'StringType.INSTANCE'. –