Не могу вспомнить решение вашей основной проблемы сейчас, но я вижу еще одну потенциальную проблему здесь - вы выбираете свои объекты, а затем запускаете транзакцию. Вот потенциальная проблема с этим:
2. fetch BankAccount (let's say it has balance of $100)
2.5 Some other process modifies' the BankAccount to have a balance of $200
3. begin transaction
4. deposit $20 into BankAccount
5. commit new balance ($120) into BankAccount
Упс! Вы только что уничтожили целую кучу денег. то, что должно было быть балансом 220, теперь баланс 120.