0

问题是关于 Scalar DB ( https://github.com/scalar-labs/scalardb )。在下面的代码中,我检查用户是否存在。如果是这样,我会抛出一个异常。如果不是,我会在表格中添加它。我在开始时创建了一个 DistributedTransaction 实例,并在所有事务中使用它。

val transaction: DistributedTransaction = transactionService.start
logger.trace("transaction started: " + transaction);
//Perform the operations you want to group in the transaction
val userExists:Boolean = userShouldNotExist(transaction,userKey)
if(!userExists) {
  userTransactionRepository.addUser(transaction, user)
  userProfileAndPortfolioTransactionRepository.addUserProfileAndPortfolio(transaction, user)
  userTokenTransactionRepository.addToken(transaction, emailToken, user)
  commitTransaction(transaction)
  (user: User, profileAndPortfolio: ExternalUserProfile, emailToken: UserToken)
} else {
  throw DuplicateUserException(user)
}

如果 else 阻塞,我是否需要使用 DistributedTransaction 进行一些清理/最终确定,还是可以保持原样?

4

1 回答 1

0

你基本上可以保持原样。

请注意,即使!userExists返回true,用户也可以在另一个事务检查后创建。在这种情况下,commit 会抛出异常。

于 2020-07-21T11:31:51.580 回答