gpt4 book ai didi

java - 在事务上下文中使用 findBy

转载 作者:行者123 更新时间:2023-11-30 11:11:13 26 4
gpt4 key购买 nike

给定:

  • controller PersonController with a @Transactional action save
  • 服务 PersonService,方法 populateProperties(PersonInstance) 从 Controller 操作调用

我想根据一些已经保存在数据库中的数据来填充 personInstance 属性,如下所示:

def personLookupData = PersonLookupData.findByUsername(personInstance.username)
personInstance.firstName = personLookupData.firstName

findByUsername 方法刷新 hibernate session ,为了避免它(因为它一直给我描述 here 的问题),我这样做:

def personLookupData = PersonLookupData.withNewSession { PersonLookupData.findByUsername(personInstance.username) }
personInstance.firstName = personLookupData.firstName

这就是我想要的(让我使用 findBy 而无需刷新 session ),当只有几个 findBy 可以使用时,这很好,但是鉴于更深的调用堆栈(就服务而言)和在不同地方进行更多的数据库查找,在任何地方使用 withNewSession 都会变得有点难看。

除了制作一个 PersonLookupService 将在一个 withNewTransaction block 中收集所有必需的数据并返回它之外,还有其他好的(常规)方法可以做到这一点吗?

最佳答案

我认为您应该将 @Transactional 从 PersonControlller 移至 PersonService。

如果您有更多服务调用要包含在同一事务中,则需要使用标记为@Transactional 的事务边界网关,并调用当前业务案例所需的所有服务。

控制事务不是 MVC 组件的责任。事务边界由服务层处理。

关于java - 在事务上下文中使用 findBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27502758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com