【发布时间】:2019-09-01 09:29:02
【问题描述】:
所以,我有一个控制器 [POST] 方法,它基本上应该创建一个 transaction
逻辑很简单,同时创建transaction 两个帐户 应该涉及(这是场景),进入transaction 我正在传递3个字段 - amount,emitterId 和 @987654327 @。创建事务后,senderBalance 应减少transaction.amount,receiverBalance 应增加transaction.amount,但由于某种原因没有任何变化
代码如下:
@Autowired
private AccountRepository accountRepository;
@Autowired
private TransactionRepository transactionRepository;
@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();
Integer emitterBalance = accountRepository.findById(result.getSenderAccountId()).get().getBalance();
Integer receptorBalance = accountRepository.findById(result.getReceiverAccountId()).get().getBalance();
Integer amount = transactionRepository.findById(result.getId()).get().getAmount();
Integer emitterFinalBalance = emitterBalance - amount;
Integer receptorFinalBalance = receptorBalance + amount;
accountRepository.findById(result.getSenderAccountId()).get().setBalance(emitterFinalBalance);
accountRepository.findById(result.getReceiverAccountId()).get().setBalance(receptorFinalBalance);
transactionRepository.save(result);
transactionRepository.save(transaction);
return ResponseEntity.created(location).build();
}
实体 交易
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private Integer amount;
private Instant created;
private Long senderAccountId;
private Long receiverAccountId;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "emitterId")
private Account emitterId;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "receptorId")
private Account receptorId;
public Transaction(Integer amount, Account emitterId, Account receptorId){
this.created = Instant.now();
this.amount = amount;
this.emitterId = emitterId;
this.receptorId = receptorId;
senderAccountId = this.emitterId.getId();
receiverAccountId = this.receptorId.getId();
}
}
帐户
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String holder;
@NotNull
private Integer balance;
@OneToMany(mappedBy = "emitterId",fetch = FetchType.LAZY,cascade = CascadeType.ALL)
private List<Transaction> transactionsMade;
@OneToMany(mappedBy = "receptorId",fetch = FetchType.LAZY,cascade = CascadeType.ALL)
private List<Transaction> transactionsReceived;
public Account(String holder, Integer balance){
this.holder = holder;
this.balance = balance;
}
public Account(Long id){
this.id = id;
}
}
你能帮我解决这个问题吗?:)?
谢谢你!
【问题讨论】:
-
能否请您在控制器中提供您的 transactionRepository 声明。
-
请稍等,我会在 30 秒内更新代码
-
你在你的方法中究竟在哪里改变
result或transaction的值?
标签: java database hibernate transactions h2