Проверка баланса аккаунта с помощью Java и Hibernate HQL - PullRequest
2 голосов
/ 26 января 2011

У меня есть следующие свойства в моем текущем объекте Баланс счета:

long id;                     // Database ID
Date date;                   // date when this balance object was created
boolean currentBalanceFlag;  // indicates this is the most recent balance
float amount;                // the total sum currently in the account balance
float depositAmount;         // amount deposited that resulted in this objects amount 
float withdrawalAmount;      // amount withdrawn that resulted in this objects amount
Balance lastBalance;         // last balance object for traversing
User user;                   // owner of the balance
String note;                 // detailed description of transaction that resulted in current blanace

На балансе выполняются только два действия. Депозиты и снятие средств.

Вопрос:

Как мне создать HQL-запрос, который будет:

-сумма всех depositAmount для user
-сумма withdrawalAmount для user
- вычесть результат первого суммирования из второго суммирования
-сравнить результат вычитания с amount для user в Balance объекте, который имеет currentBalanceFlag, равный true

в псевдокоде:

resultAmount = select ( sum(depositAmount) - sum(withdrawalAmount) ) from Balance where user=user
amount = select amount from Balance where user=user and currentBalanceFlag=true

И окончательный логический результат, который я хотел бы получить от одного вызова базы данных с HQL-запросом:

resultAmount == amount

1 Ответ

1 голос
/ 30 января 2011
select (sum(flow.depositAmount) - sum(flow.withdrawalAmount) - current.amount) 
from Balance flow, Balance current
where flow.user=:user
and current.user=:user 
and current.currentBalanceFlag=true

Это вернет разницу между суммой всех потоков и текущим балансом.

В дополнение к этому вам не нужно проверять целостность ваших данных.Если у вас нет миллиардов строк, вычисление текущего баланса с суммой SQL должно быть достаточно быстрым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...