Hibernate:如何使用 CONCAT 和 GROUP_CONCAT

Posted

技术标签:

【中文标题】Hibernate:如何使用 CONCAT 和 GROUP_CONCAT【英文标题】:Hibernate: how to use CONCAT and GROUP_CONCAT 【发布时间】:2011-06-24 17:51:06 【问题描述】:

如何在 HQL 查询中使用 CONCAT()GROUP_CONCAT()

【问题讨论】:

【参考方案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 将假定结果也是数字并崩溃。

【讨论】:

+1 表示您将自己绑定到 mysql。 group_concat 在例如 microsoft sql server 中不可用。 hibernate 的目标是独立于 sql 供应商。【参考方案2】:

子类化方言

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

或使用SQLFunctionTemplate

【讨论】:

你能再解释一下吗?我需要在哪里写这个 registerFunction?【参考方案3】:

如果您使用 createSQLQuery,请将该列作为字符串使用 addScalar。

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

【讨论】:

Hibernate.STRING 自 Hibernate 版本 3.6.X Here is the deprecated document 起已被弃用,因此您必须使用 StringType.INSTANCE

以上是关于Hibernate:如何使用 CONCAT 和 GROUP_CONCAT的主要内容,如果未能解决你的问题,请参考以下文章

如何使用hibernate逆向工程排除多对一关系?

MySQL:使用 JOIN 和 GROUP_CONCAT 进行更新

javascript关于数列的concat与unshift的问题

SQL for Hibernate 4和5中序列的差异

如何在 MySql 的 CONCAT 和 SUM VALUES 中使用 GROUP_CONCAT

如何使用带有通配符查询的 Hibernate Search 并输出结果对象列表