Hibernate
中查询实体后set
了某个值,如果再使用find
查询这个实体,会发现查询出的实体已经是set
过的值,原因是项目中Hibernate
开启了缓存,查询时优先从当前会话的缓存查询;如果不同会话则不影响。
- 测试代码:
@Service public class SpiderInfoService { @PersistenceContext private EntityManager em; public void test() { SpiderInfo entity = em.find(SpiderInfo.class, 1L); entity.setTitle("123"); SpiderInfo oldEntity = em.find(SpiderInfo.class, 1L); //会发现 oldEntity.getTitle(); 的值已经是123 } }
- 可以使用
refresh
方法:从数据库中刷新实体的状态,覆盖对实体所做的更改 -
需要注意的是,如果之前对实体做过更改,那么刷新后会覆盖之前实体所做的更改
- 代码如下:
@Service public class SpiderInfoService { @PersistenceContext private EntityManager em; public void test() { SpiderInfo entity = em.find(SpiderInfo.class, 1L); entity.setTitle("123"); SpiderInfo oldEntity = em.find(SpiderInfo.class, 1L); em.refresh(oldEntity); //会发现 entity.getTitle(); 和 oldEntity.getTitle(); 的值都变成了数据库中的值 } }