Spring 当外部事务失败时,如何使内部事务回滚
我想创建一个名为createTransaction的方法,如果事务成功,它将提交该事务,但如果事务失败,则回滚某个表中的所有事务。另一方面,我希望将事务日志保存到db中,即使它失败或成功 我尝试过这段代码,但当我尝试输入一个未保存在db中的customerId时,事务应该回滚到事务、产品和客户实体,但它仍然在产品表中提交事务。有人能告诉我发生了什么事并给我解决办法吗Spring 当外部事务失败时,如何使内部事务回滚,spring,spring-boot,jpa,spring-data-jpa,transactions,Spring,Spring Boot,Jpa,Spring Data Jpa,Transactions,我想创建一个名为createTransaction的方法,如果事务成功,它将提交该事务,但如果事务失败,则回滚某个表中的所有事务。另一方面,我希望将事务日志保存到db中,即使它失败或成功 我尝试过这段代码,但当我尝试输入一个未保存在db中的customerId时,事务应该回滚到事务、产品和客户实体,但它仍然在产品表中提交事务。有人能告诉我发生了什么事并给我解决办法吗 public String createTransactionWithLog(TR_Transaction transaction
public String createTransactionWithLog(TR_Transaction transaction) {
String message = "";
try {
boolean successTransaction = createTransaction(transaction);
if(successTransaction == true) {
message = "Transaksi sukses";
}else {
message = "Transaksi gagal";
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
Activity_Log log = new Activity_Log(LocalDateTime.now(), "DoTransaction", message);
activityLogRepository.save(log);
}
return message;
}
@Transactional
public boolean createTransaction(TR_Transaction transaction) {
long productId = transaction.getProductId();
long customerId = transaction.getCustomer().getCustomerId();
MS_Product product = productRepository.getOne(productId);
MS_Customer customer = customerRepository.getOne(customerId);
if(product == null || customer == null) {
return false;
}else {
transaction.setCustomer(customer);
int newProductStock = product.getProductStock() - transaction.getQuantity();
product.setProductStock(newProductStock);
transaction.setProductPrice(newProductStock);
customer.getTransactions().add(transaction);
TR_Transaction savedTransaction = transactionRepository.save(transaction);
MS_Customer updatedCustomer = customerRepository.save(customer);
MS_Product updatedProduct = productRepository.save(product);
return true;
}
}
你用的是什么数据库?我用的是h2数据库。这有关系吗?失败时提交哪一行
createTransaction
?失败时是否引发异常?第二个createTransaction,我应该如何处理异常这是标准嵌套事务的行为。请尝试嵌套内部事务。由于我不熟悉Java和h2数据库,请自己尝试一下您使用的是什么数据库?我使用h2数据库。这有关系吗?失败时提交哪一行createTransaction
?失败时是否引发异常?第二个createTransaction,我应该如何处理异常这是标准嵌套事务的行为。请尝试嵌套内部事务。由于我对Java和h2 db不熟悉,请自己试试