spring - 实体管理器是否在每次请求后自动清除?
问题描述
Spring 为每个线程提供一个实体管理器。但是如果Spring在@RestControllers方法完成执行后清除实体管理器,我找不到信息?因此,例如,如果我有类似的方法
@GetMapping("/{id}")
public ResponseEntity<SomeEntity> someRequest() {
SomeEntity res = someService.doSomeJpaRelatedWork();
return new ResponseEntity<>(res), HttpStatus.OK);
}
请求之后会调用 EntityManager.clear() 还是 Entity Manager 会保留实体以在该线程上进一步请求?
解决方案
由于您的方法不使用 anEntityManager
也没有 it@Transactional
注释,因此它完全独立于 theEntityManager
并且本身不会影响任何EntityManager
.
另外,我怀疑 Spring 是否会clear
隐式调用。
但是Spring 不是每个请求使用一个EntityManager
,Thread
而是每个请求使用一个。因此,您的 Web 应用程序中的下一个请求将获得一个EntityManager
清晰的一级缓存。因此,虽然您提出的问题的正确答案是“不,clear
没有被调用”,但可能相关的答案是“是的,EntityManager
每次调用控制器方法时都很清楚。”
推荐阅读
- swift - 菜单栏右键菜单中使用的NSMenuItems显示为灰色无法点击
- java - MDC 仅用于日志记录吗?
- python - 如何获取删除字符的所有字符串组合
- java - 由于 ChromeDriver 未实例化,Selenium 测试未在 jenskins 中运行
- android - LocationListener 导致 android 中的内存泄漏
- xamarin.forms - 如何使用 xamarin 表单检查我的应用程序的移动数据的允许/拒绝权限
- matlab - 在数组中查找匹配或最接近的值(从给定值)
- python - 将项目列表转换为熊猫中的虚拟对象
- mongodb - 如何在 Python 中查找 MongoDB 副本的主要主机和访问
- video - 使用 MediaSource 时视频播放未达到 60 FPS