每次请求后,实体管理器是否会自动清除?

时间:2018-09-16 06:22:26

标签: spring spring-mvc spring-boot spring-data-jpa

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

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

    }

在请求之后将春季调用EntityManager.clear()还是将在该线程上保留实体以供进一步请求的实体?

1 个答案:

答案 0 :(得分:1)

由于您的方法没有使用EntityManager,也没有@Transactional批注,因此它完全独立于EntityManager,并且不会影响任何EntityManager

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

Spring不会每EntityManager使用一个Thread,而是每个请求使用一个。 因此,您的Web应用程序中的下一个请求将获得具有清晰的一级缓存的全新EntityManager。因此,尽管您所问问题的正确答案是“否,未调用clear”,但可能相关的答案是“是,在每次调用控制器方法时,EntityManager都清晰可见”。