问题描述
我在我的模型/实体类中添加了一个@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更改为versionit0_.WITHIN 组。
我该如何处理? 谢谢
解决方法
这不是休眠问题,而是您的查询问题。 内部查询应命名或别名,并且您缺少名称,所以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')")
,
我终于自己解决了,用\ 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')")