首页 > 解决方案 > 实体管理器是否在每次请求后自动清除?

问题描述

Spring 为每个线程提供一个实体管理器。但是如果Spring在@RestControllers方法完成执行后清除实体管理器,我找不到信息?因此,例如,如果我有类似的方法

    @GetMapping("/{id}")
    public ResponseEntity<SomeEntity> someRequest() {
        SomeEntity res = someService.doSomeJpaRelatedWork();
        return new ResponseEntity<>(res), HttpStatus.OK);

    }

请求之后会调用 EntityManager.clear() 还是 Entity Manager 会保留实体以在该线程上进一步请求?

标签: springspring-mvcspring-bootspring-data-jpa

解决方案


由于您的方法不使用 anEntityManager也没有 it@Transactional注释,因此它完全独立于 theEntityManager并且本身不会影响任何EntityManager.

另外,我怀疑 Spring 是否会clear隐式调用。

但是Spring 不是每个请求使用一个EntityManagerThread而是每个请求使用一个。因此,您的 Web 应用程序中的下一个请求将获得一个EntityManager清晰的一级缓存。因此,虽然您提出的问题的正确答案是“不,clear没有被调用”,但可能相关的答案是“是的,EntityManager每次调用控制器方法时都很清楚。”


推荐阅读