小编Ole*_*nov的帖子

更新 JPA(Hibernate) 实体的更好方法是:事务性还是非事务性,为什么?

我有一种情况,我必须在两个选项之间做出选择,但我不清楚这些选项之间有什么区别。如果有人可以向我解释我应该选择哪一个以及为什么,我将非常感激。长话短说,我有一个简单的 JPA 实体(Kotlin 语言):

@Entity
@Table(name = "account")
data class AccountEntity(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long,

    var balance: Int,

    @ManyToOne
    var accountType: AccountTypeEntity
)
Run Code Online (Sandbox Code Playgroud)

在业务逻辑层,我想要一种通过其 accountId 更新帐户余额的方法。基本上我需要通过 id 加载帐户实体,然后设置新的余额,最后使用 Hibernate 提供的保存方法。但我也发现如果我的方法将用@transactional 注释,我不需要以显式形式调用 save 方法。所以从那时起我有两个选择

第一

fun updateAccountBalance(id: Long, balance: Int) {
    val account = accountRepository.findById(id).orElseThrow { RuntimeException("No account with id=$id found") }
    account.balance = balance
    accountRepository.save(account)
}
Run Code Online (Sandbox Code Playgroud)

第二个

@Transactional
fun updateAccountBalance(id: Long, balance: Int) {
    val account = accountRepository.findById(id).orElseThrow { RuntimeException("No account with id=$id found") }
    account.balance = …
Run Code Online (Sandbox Code Playgroud)

spring hibernate spring-data-jpa kotlin

5
推荐指数
1
解决办法
117
查看次数

标签 统计

hibernate ×1

kotlin ×1

spring ×1

spring-data-jpa ×1