2011-02-10 216 views

回答

9

关于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会认为结果也是数字和崩溃。

+3

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

1

子类的话

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

,或者如果您使用createSQLQuery使用SQLFunctionTemplate

1

,使用addScalar到列字符串。

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从Hibernate版本3.6.X [这里是废弃的文档](https://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Hibernate.html)已被弃用。 ,所以你必须使用'StringType.INSTANCE'。 –

相关问题