JPQL CASE WHEN 寫法一則

2021-09-01 10:13:59 字數 1066 閱讀 4470

其實也沒什麼特別的,就是jpa2中,jpql的解析還是有硬傷啊,害得我摸索了好一陣子。

請看:

public static final string hql_find_transaction_amount = 

"select new foo.bar.service.report.tax.transactionamountfield(at.account, sum(

case at.transactionsign

when 'credit' then at.amount * 1

when 'debit' then at.amount * -1

else at.amount end))" +

" from accounttransaction at" +

" where at.account.id > 0 and at.transactiontype in :tt" +

" and at.settled=true and (at.settlementdate between :begindate and :enddate)" +

" group by at.account";這裡的jpql是根據tansaction type 統計該type有多少金額,本來簡單的,但是金額加上符號後,就不簡單了,要分正負了。sum函式因此變複雜了。用到了case when。case when本來也沒什麼,照著語法寫唄。由於我判斷的不是一般的資料,沒錯,

at.transactionsign是乙個enum,鑑於where部分的寫法 " where at.account.id > 0 and at.transactiontype in :tt" ,我hll的寫上了 foo.bar.at.transactionsign.credit 這樣的全包名,執行結果呢,你猜? 錯了!

明明現在的jqpl,enum是要用物件的啊,於是開始了漫漫的各種折騰,最後,絕望了,心灰意冷的直接寫上了 'credit' 這樣的字串,再試,gc來了,居然成了!

總結下來,就是在where中可以使用物件和enum比較,而在其他部分(如select)中要用原生字串比較。

2012-8-24

makefile的寫法 一

linux中使用g 的方法 第一步預處理 g e test.cpp o test.i o 表示輸出的專案 該部處理將巨集,typedef等處理替換 結果是 i 檔案 1.預處理 pre processing gcc e test.c o test.i i檔案 第二步編譯 g s test.i o t...

一重Prototype寫法

每個專案產品都會讓你加埋點,你是願意花幾天乙個個加,還是願意幾分鐘乙個小時加完去喝茶聊天?來試試這520web工具,高效加埋點,目前我們公司100號前端都在用,因為很好用,所以很自然普及開來了,推薦給大家吧 錄音管理 let record function recordermanager recor...

的寫法 寫法 通告的寫法及範例

基本釋義 通告是在一定範圍內公布應當遵守或周知的事項時使用的公文。通告不同公告,它主要用於有關單位開展業務工作需要。它的使用者可以是各級各類機關,它的內容又往往涉及到社會的方方面面,因此,無論其使用主體還是其內容都具有相當的廣泛性。基本特點 1.規範性 通告所告知的事項常作為各有關方面行為的準則或對...