2016-12-27 87 views
0

我現在正在涉足SQL,希望對我創建的問題有所幫助。休眠查詢 - 複雜

要練習一些編程我正在做一個借條應用程序。以下是我存儲 我的IOU記錄(忽略一些相關列)的表。這張表允許用戶說「嘿,你欠我X金錢」和「我欠你X金錢」。

| Creator | Type  | User_Involved| Amount | 
|:-----------|------------:|:------------:| 
| 1   | 0  |  2  | 3.0 
| 2   | 0  |  1  | 4.0 
| 3   | 1  |  1  | 5.0 

注意:類型表示用戶是否「借出或請求了錢」。 0 =借出 1 =請求

目標:我的目標是獲取所有用戶及其總欠款額(負值或負值)的列表。

這已經變得相當困難,因爲我不能做一個簡單的羣組,因爲有兩列我需要組合(Creator和User_Involved)。

我設法寫了一個SQL查詢,給出了正確的結果,但我無法將其轉換成Hibernate版本。

該問題主要歸結爲JPA無法執行工會。

查詢的問題:

/** assumption 1 is owed to creator **/ 

select sum(owed_to_you) as owed_to_you, friend_id 
from 
(
/** you created **/ 
select sum(CASE WHEN transaction_type = 0 THEN -amount ELSE amount END) as owed_to_you, friend_involved as friend_id 
from iou 
where 
    creator = 3 

group by friend_involved 

union all 

/** someone else created **/ 
select sum(CASE WHEN transaction_type = 1 THEN -amount ELSE amount END) as owed_to_you, creator as friend_id 
from iou 
where 
    friend_involved = 3 

group by creator) as theunion 

group by friend_id 

除了加載所有白條到內存和排序這樣的說法,我完全難倒。我今天做了很多研究,並且學到了很多東西,但是,我仍然沒有取得進展。

任何幫助將不勝感激。

+1

Fyi JPA允許使用實體管理器調用本機SQL查詢。 – Mordechai

回答

1

您可以分別執行這兩個查詢並將結果以Java代碼結合起來。