Spring 如何在hibernate 5.0.1中实现Listag函数而不使用本机查询

Spring 如何在hibernate 5.0.1中实现Listag函数而不使用本机查询,spring,hibernate,jpa,Spring,Hibernate,Jpa,我在spring boot 1.5项目中工作。 我实现了Listag,但我在中遇到未被接受的令牌错误。请帮助我在hibernate中实现Listag,而不使用本机查询 Output: jobname Empno AC_ACCOUNT 206 AC_MGR 205 AD_ASST 200 AD_PRES 100 AD_VP 101,102 FI_ACCOUNT 110 ,113 ,111 ,1

我在spring boot 1.5项目中工作。 我实现了Listag,但我在中遇到未被接受的令牌错误。请帮助我在hibernate中实现Listag,而不使用本机查询

Output:
    jobname     Empno
    AC_ACCOUNT  206
    AC_MGR      205
    AD_ASST     200
    AD_PRES     100
    AD_VP       101,102
    FI_ACCOUNT  110 ,113 ,111 ,109 ,112

select  jobname, listagg(empno, ',') within group (order by empno) empno
  from emp group by jobname;
-


恐怕这是不可能的。JPA和Hibernate都不知道Listag

您必须使用SQL


原因是JPA和Hibernate实现了在所有数据库上运行的功能,但ListAg仅由少数几个数据库实现。

要在Hibernate查询中使用listagg:

如果您使用的是Oracle或MySQL,请首先在Hibernate方言中注册listagg函数,方法是扩展Oracle10gDialogue 公共类CustomOracle10gDialogue扩展了Oracle10gDialogue{ 公共自定义语言{ 超级的 registerFunctionLISTAGG,新的SQLFunctionTemplateStandardBasicTypes.STRING,LISTAGG?1',,在GROUPORDER中按?1; } }

更新配置文件以使用自定义方言。spring.jpa.database platform=com.abc.customoracle10gplantical或com.abc.customoracle10gplantical

使用Listag示例-从联系人c中选择c.id、ListagFirstName,其中按c.id分组


谢谢你的回复
unexpected token: within","stack_trace":"antlr.NoViableAltException: unexpected token: within
at org.hibernate.hql.internal.antlr.HqlBaseParser.aliasedExpression(HqlBaseParser.java:2365)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectedPropertiesList(HqlBaseParser.java:1379)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1282)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1022)
at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:730)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:323)
at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:186)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:279)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1907)
at