问题 Hibernate:如何使用CONCAT和GROUP_CONCAT


我该怎么用 CONCAT() 和 GROUP_CONCAT() 在HQL查询?


2819
2018-02-10 09:57


起源



答案:


关于 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将假设结果也是数字和崩溃。


10
2018-04-16 10:43



+1提及你绑自己的mysql。例如,microsoft sql server中没有group_concat。 hibernate的目标是独立于sql供应商。 - Terraego


答案:


关于 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将假设结果也是数字和崩溃。


10
2018-04-16 10:43



+1提及你绑自己的mysql。例如,microsoft sql server中没有group_concat。 hibernate的目标是独立于sql供应商。 - Terraego


方言的子类

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

或使用 SQLFunctionTemplate


1
2018-04-16 10:55



你能解释一下这个吗?我在哪里需要写这个registerFunction? - Jerry


如果您使用的是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);

1
2017-08-14 16:18



Hibernate.STRING 自Hibernate版本3.6.X以来已被弃用 这是已弃用的文档,所以你必须使用 StringType.INSTANCE。 - Aniket Kulkarni