首页 > 解决方案 > 如果我们有 session.evict(),为什么我们需要 javax.persistence.EntityManager.detach()?

问题描述

还有什么javax.persistence.EntityManager.remove()方法与上述两种方法不同?

session.evict() 有什么区别,

javax.persistence.EntityManager.detach() 和

javax.persistence.EntityManager.remove() , session.delete() ?

标签: hibernatesession

解决方案


这三个是用于非常不同的事情的方法。

  1. remove()将持久化实体标记为删除,这意味着在刷新时休眠将生成相应的sql删除语句。
  2. evict()用于从内部缓存(休眠一级缓存)中删除实体。如果从db休眠中加载实体,会将其存储在缓存中,随后的查询将首先命中缓存。驱逐实体强制休眠db再次查询。
  3. detach()当您想要使实体不受管理时使用。您基本上告诉 hibernate 停止跟踪该实体修改(脏检查),这样如果您以任何方式更新它的字段,您将不会在db.

推荐阅读