【问题标题】:Is Entity Manager cleared automatically after each request?实体管理器是否在每次请求后自动清除?
【发布时间】:2018-09-16 06:22:26
【问题描述】:

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

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

    }

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多