我有以下姓名查询
@NamedQuery(name="ScInstantTrack.getCustomerDetails",
query="select b.cardDetail.mstCustomer.customerId, last_day(b.endDate), " +
"LISTAGG(b.txnId,'|') WITHIN GROUP (ORDER BY b.endDate), " +
"count(b.txnId), sum(b.amount), sum(b.balanceAmt), sum(b.redemptionAmt) " +
"from ScInstantTrack b " +
"where b.cardNo = b.cardDetail.cardBarcode " +
"AND b.cardDetail.mstCustomer.customerId = :customerId " +
"and b.startDate <= trunc(:todayDate) " +
"and b.endDate >= trunc(:todayDate) " +
"and b.cardDetail.mstStatus.statusId = 3003 group by b.cardDetail.mstCustomer.customerId, last_day(b.endDate)")
当我执行此查询时出现以下错误:
unexpected token: WITHIN
我正在使用 Oracle 数据库。
为什么我会收到此错误?如何解决这个问题?
最佳答案
尝试使用@NamedNativeQuery
而不是@NamedQuery
。
另请检查this explanation它们之间的差异。
基本上,您使用的是 Oracle DB 中独有的表达式。换句话说 - 您想要执行 native 查询(Oracle DB 语言 native 查询)。命名查询使用 Java Persistence Query Language
(即 HQL)。
关于java - Hibernate命名查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37297716/