Spring Boot - 当事务开始时自动启用 Hibernate 会话过滤器

问题描述 投票:0回答:1

我想知道是否可以拦截 Hibernate Session 创建,以便在事务开始时自动启用过滤器。当且仅当 spring Boot 对每个 http 请求使用专用会话时,我才能做到这一点:我的第二个问题。

我有一个 Service 类,其方法标记为

@Transactional

@Service
public class MyServiceImpl implements MyService {

    @Override
    @Transactional
    public void saveEntity(Entity entity) {
        //save entity
    }
}

我有一个 RestController 类,它公开一个端点并使用服务类。

@RestController
@RequestMapping("/service")
public class MyRestController {
    
    private final MyService myService;
    
    @GetMapping("save")
    public String save() {
        myService.saveEntity(entity);
    }
}
  • Spring Boot 是否为 http 请求创建一个新的专用 hibernate 会话?
  • 如果是,是否可以拦截(例如通过回调)会话创建以启用休眠过滤器?
spring-boot hibernate hibernate-session
1个回答
0
投票

从 Hibernate 6.5 开始,

autoEnabled
上的
@FilterDef
参数可以设置为 true,默认情况下会对每个会话启用过滤。请参阅文档

此外,对于 spring,

JpaVendorAdapter.postProcessEntityManager
setEntityManagerInitializer(Consumer<EntityManager>)
上的
JpaTransactionManager
方法以及
LocalContainerEntityManagerFactoryBean
可用于更好地控制实体管理器创建后,您可以使用它来启用过滤器。请参阅此问题了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.