【问题标题】:Missing Keyword WITHIN HibernateHibernate 中缺少关键字
【发布时间】:2021-01-04 00:57:41
【问题描述】:

我在我的模型/实体类中添加了一个@Formula,以便为每个元素发出请求。

@Formula("(select (LISTAGG(ver.ACC_DESC_ES, ', ') WITHIN GROUP (ORDER BY ACC_ID)) from TSEN_ACCIONES_BIB acc, VSEN_ELC_REVISION ver where ELC_ID = acc.ACC_ELC_ID and acc.ACC_ACTIVA='S')")

问题在于 Hibernate 将 WITHIN 作为表列,并且在没有它的情况下生成查询。

select
        count(*)
    from
        TSEN_ACCIONES_BIB acc
    where
        revisionit0_.ELC_ID = acc.ACC_ELC_ID
        and acc.ACC_ACTIVA='N'
        and (
            acc.ACC_RESALTAR='S'
            or acc.ACC_RESALTAR='R'
        )) as formula3_0_,
    (select
        LISTAGG(revisionit0_.ACC_DESC,
        ', ') revisionit0_.WITHIN
    GROUP (ORDER BY
        revisionit0_.ACC_ID)
    from
        TSEN_ACCIONES_BIB acc
    where
        revisionit0_.ELC_ID = acc.ACC_ELC_ID
        and acc.ACC_ACTIVA='S') as formula4_0_,  

如您所见, WITHIN GROUP 更改为 revisionit0_.WITHIN 组。

我该如何处理? 谢谢

【问题讨论】:

  • 您可能必须将WITHIN 添加到方言关键字列表中。

标签: java sql oracle hibernate


【解决方案1】:

这不是休眠问题,而是您的查询有问题。 内部查询应该命名或别名,并且您缺少名称,因此 WITHIN 被解释为名称。

正确的行将是

@Formula("(select (LISTAGG(ver.ACC_DESC_ES, ', ') TEMPCOLNAME WITHIN GROUP (ORDER BY ACC_ID)) from TSEN_ACCIONES_BIB acc, VSEN_ELC_REVISION ver where ELC_ID = acc.ACC_ELC_ID and acc.ACC_ACTIVA='S')")

【讨论】:

    【解决方案2】:

    我终于自己解决了用 \00WITHIN 更改 WITHIN。

    也许@DhruvJoshi 的回答也可以。

     @Formula("(select (LISTAGG(ver.ACC_DESC_ES, ', ') \00WITHIN GROUP (ORDER BY ACC_ID)) from TSEN_ACCIONES_BIB acc, VSEN_ELC_REVISION ver where ELC_ID = acc.ACC_ELC_ID and acc.ACC_ACTIVA='S')")
    

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2018-02-24
      • 2012-07-26
      • 2020-02-08
      • 2012-09-26
      相关资源
      最近更新 更多