Hibernate: как использовать CONCAT и GROUP_CONCAT

Как я могу использовать CONCAT() и GROUP_CONCAT() в запросах HQL?

Ответ 1

О concat: он работает точно так же, как и в MySQL (он объединяет строки, это не агрегатная функция).

Вы можете добавить group_concat в качестве функции sql для вашей конфигурации. Таким образом, вы предполагаете, что базовая БД знает эту функцию, и вы привязываете свою программу к 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()));

Вы также указываете, что вывод функции является строкой. Без этого, когда вы group_concat числовые поля Hibernate будет считать результат также числовым и аварийным.

Ответ 2

подкласс диалект

и

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

или используйте SQLFunctionTemplate

Ответ 3

Если вы используете createSQLQuery, используйте addScalar для этого столбца как String.

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