Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate: how to use CONCAT and GROUP_CONCAT

How can I use CONCAT() and GROUP_CONCAT() in HQL queries?

like image 423
mrcool Avatar asked Feb 10 '11 09:02

mrcool


3 Answers

About concat: it works exactly the same way as it does in MySQL (it concatenates strings, it is not an aggregate function).

You can add group_concat as an sql function to your configuration. This way you assume that the underlaying DB knows this function, and you tie your program to 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()));

You also indicate that the output of the function is a string. Without this when you group_concat numeric fields Hibernate will assume the result also to be numeric and crash.

like image 62
vbence Avatar answered Oct 17 '22 06:10

vbence


subclass the dialect

and

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

or use SQLFunctionTemplate

like image 28
zudokod Avatar answered Oct 17 '22 06:10

zudokod


If you are using createSQLQuery, use addScalar to that column as String.

SQLQuery query = sessionObj.createSQLQuery("select group_concat(column1,column2) as mycolumn from some table group by someThing");
query.addScalar("mycolumn ", Hibernate.STRING);
like image 1
user1449197 Avatar answered Oct 17 '22 07:10

user1449197