【发布时间】:2019-09-01 13:47:29
【问题描述】:
我有以下场景:两个实体 - Transaction 和 Account
交易只涉及两个账户。
创建交易后,accountSender 的金额减少,而 accountReceiver 的金额增加。
Account 实体拥有两个列表 - transactionsMadeList 和 transactionsReceivedList,所以总的来说它看起来像这样:
[
{
"id": 1,
"holder": "Pavel S",
"balance": -950,
"transactionsMade": [
{
"id": 1,
"amount": 50,
"created": "2019-09-01T13:37:24.565579Z",
"senderAccountId": 1,
"receiverAccountId": 2
},
{
"id": 3,
"amount": 35,
"created": "2019-09-01T13:37:24.614450Z",
"senderAccountId": 1,
"receiverAccountId": 2
}
],
"transactionsReceived": [
{
"id": 2,
"amount": 50,
"created": "2019-09-01T13:37:24.609462Z",
"senderAccountId": 2,
"receiverAccountId": 1
}
]
},
{
"id": 2,
"holder": "Gustaf S",
"balance": 1070,
"transactionsMade": [
{
"id": 2,
"amount": 50,
"created": "2019-09-01T13:37:24.609462Z",
"senderAccountId": 2,
"receiverAccountId": 1
}
],
"transactionsReceived": [
{
"id": 1,
"amount": 50,
"created": "2019-09-01T13:37:24.565579Z",
"senderAccountId": 1,
"receiverAccountId": 2
},
{
"id": 3,
"amount": 35,
"created": "2019-09-01T13:37:24.614450Z",
"senderAccountId": 1,
"receiverAccountId": 2
}
]
}
]
我实现了Controller 方法[POST],它创建了一个事务。
代码如下:
@Transactional
@PostMapping("/transactions")
public ResponseEntity<Transaction> createTransaction(@Valid @RequestBody Transaction transaction) {
final Transaction result = transactionRepository.save(transaction);
final URI location = ServletUriComponentsBuilder.fromCurrentRequest().
path("/{id}")
.buildAndExpand(result.getId()).toUri();
Account sender = accountRepository.findById(result.getSenderAccountId()).get();
Account receiver = accountRepository.findById(result.getReceiverAccountId()).get();
Transaction tr = transactionRepository.findById(result.getId()).get();
Integer emitterBalance = accountRepository.findById(result.getSenderAccountId()).get().getBalance();
Integer receptorBalance = accountRepository.findById(result.getReceiverAccountId()).get().getBalance();
Integer amount = tr.getAmount();
Integer emitterFinalBalance = emitterBalance - amount;
Integer receptorFinalBalance = receptorBalance + amount;
sender.setBalance(emitterFinalBalance);
accountRepository.save(sender);
receiver.setBalance(receptorFinalBalance);
accountRepository.save(receiver);
transactionRepository.save(result);
transactionRepository.save(tr);
return ResponseEntity.created(location).build();
}
我的问题是:当我将数据从 CommandLineRunner 间接静态变量保存到数据库时 - 事务对象被保存,然后显示在 transactionsMadeList/transactionsReceivedList 中,也可以通过以下方式找到[GET] ~/transactions方法
但是当我尝试通过[POST] ~/transactions 方法创建Transaction 时,Transaction 正在创建但没有被添加到transactionsMade/transactionsReceived lists
感谢任何帮助,因为我现在对此有点支持:/ 似乎问题出在 Controller 方法中的持久部分 如果您需要实体类,请告诉我我也会发布它们
【问题讨论】:
标签: java spring hibernate rest