Spring 为每个线程提供一个实体管理器。但是我找不到信息,如果 Spring 在方法完成后清除实体管理器@RestControllers?例如,如果我有一个类似于这样的方法
@GetMapping("/{id}")
public ResponseEntity<SomeEntity> someRequest() {
SomeEntity res = someService.doSomeJpaRelatedWork();
return new ResponseEntity<>(res), HttpStatus.OK);
}
弹簧会在请求后调用 EntityManager.clear((,还是 Entity Manager 会在该线程上保留实体以用于进一步请求?
由于您的方法不使用EntityManager
也没有@Transactional
注释,因此它完全独立于EntityManager
,并且本身不会影响任何EntityManager
。
另外,我怀疑春天会含蓄地呼唤clear
。
但是 Spring不是每个Thread
使用一个EntityManager
,而是每个请求使用一个。 因此,Web 应用程序中的下一个请求将获得具有明确第一级缓存的新EntityManager
。因此,虽然您提出的问题的正确答案是"不,clear
没有被调用",但可能相关的答案是"是的,每次调用控制器方法时EntityManager
都很清楚"。