簡體   English   中英

Hibernate命名查詢問題

[英]Hibernate named query issue

我有以下姓名查詢

@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

還要檢查一下它們之間區別的解釋

基本上,您使用的是Oracle DB中專有的表達式。 換句話說,您要執行本機查詢 (使用Oracle DB語言的本機查詢 )。 命名查詢使用Java Persistence Query Language (即HQL)。

發生錯誤是因為LISTAGG是oracle特定的功能。 該功能在HQL中不可用,因此您無法使用任何功能代替HQL。

為了獲得結果,您必須使用SQLQuery執行本機SQL查詢。 這樣,您必須為每個數據庫實現一個thw查詢版本,但是它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM