我想知道是否可以拦截 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);
}
}
从 Hibernate 6.5 开始,
autoEnabled
上的 @FilterDef
参数可以设置为 true,默认情况下会对每个会话启用过滤。请参阅文档。
此外,对于 spring,
JpaVendorAdapter.postProcessEntityManager
或 setEntityManagerInitializer(Consumer<EntityManager>)
上的 JpaTransactionManager
方法以及 LocalContainerEntityManagerFactoryBean
可用于更好地控制实体管理器创建后,您可以使用它来启用过滤器。请参阅此问题了解更多信息。