Spring为每个线程提供一个Entity Manager。但是如果@RestControllers方法执行完后Spring是否清除了实体管理器,我找不到信息吗?例如,如果我有与此类似的方法
@GetMapping("/{id}")
public ResponseEntity<SomeEntity> someRequest() {
SomeEntity res = someService.doSomeJpaRelatedWork();
return new ResponseEntity<>(res), HttpStatus.OK);
}
在请求之后将春季调用EntityManager.clear()还是将在该线程上保留实体以供进一步请求的实体?
答案 0 :(得分:1)
由于您的方法没有使用EntityManager
,也没有@Transactional
批注,因此它完全独立于EntityManager
,并且不会影响任何EntityManager
。
此外,我怀疑Spring是否会隐式调用clear
。
但 Spring不会每EntityManager
使用一个Thread
,而是每个请求使用一个。
因此,您的Web应用程序中的下一个请求将获得具有清晰的一级缓存的全新EntityManager
。因此,尽管您所问问题的正确答案是“否,未调用clear
”,但可能相关的答案是“是,在每次调用控制器方法时,EntityManager
都清晰可见”。