hibernate - 如果我们有 session.evict(),为什么我们需要 javax.persistence.EntityManager.detach()?
问题描述
还有什么javax.persistence.EntityManager.remove()
方法与上述两种方法不同?
session.evict() 有什么区别,
javax.persistence.EntityManager.detach() 和
javax.persistence.EntityManager.remove() , session.delete() ?
解决方案
这三个是用于非常不同的事情的方法。
remove()
将持久化实体标记为删除,这意味着在刷新时休眠将生成相应的sql
删除语句。evict()
用于从内部缓存(休眠一级缓存)中删除实体。如果从db
休眠中加载实体,会将其存储在缓存中,随后的查询将首先命中缓存。驱逐实体强制休眠db
再次查询。detach()
当您想要使实体不受管理时使用。您基本上告诉 hibernate 停止跟踪该实体修改(脏检查),这样如果您以任何方式更新它的字段,您将不会在db
.
推荐阅读
- python - 验证码和 CSRF 之间的冲突
- react-native - FlatList 重新渲染问题
- javascript - 在鼠标悬停时找到 SVG 图像中的每个路径
- python - 为什么 pd.as_matrix() 会更改原始数据帧的值和小数位数?
- python - 使用 selenium 重定向到新页面后如何抓取新的刷新数据
- swift - 如何以编程方式选择 UICollectionView 的所有单元格
- javascript - Echarts:放大时线条消失
- angular - 以角度创建新项目时出现zlib错误
- javascript - 导入函数时反应错误
- algorithm - 如何在路径列表中找到唯一最短路径列表?