首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cascade=evict在hibernate hbm文件中的用法是什么?

cascade=evict在hibernate hbm文件中的用法是什么?
EN

Stack Overflow用户
提问于 2017-10-11 18:39:13
回答 3查看 2K关注 0票数 0

有人能解释一下cascade = "evict"在hibernate映射文件中的用法吗?

映射文件摘录:

代码语言:javascript
复制
<set name="details" cascade="evict">
  <key column="detailid"></key>
  <one-to-many class="com.intialize.example.Details"/>
</set>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-11 18:57:46

驱逐和分离是一样的,是被反对的。

请参阅API文档https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html#EVICT

这里有一篇关于级联类型的优秀文章:https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/

从医生那里

5.12.当调用刷新()方法时,实体的状态与数据库同步。如果您不希望这种同步发生,或者如果您正在处理大量的对象,并且需要有效地管理内存,则可以使用evict()方法从第一级缓存中删除对象及其集合。

例329。将实体从EntityManager中分离出来

代码语言:javascript
复制
for(Person person : entityManager.createQuery("select p from Person p", Person.class)
        .getResultList()) {
    dtos.add(toDTO(person));
    entityManager.detach( person );
}

例330。将实体从Hibernate会话中逐出

代码语言:javascript
复制
Session session = entityManager.unwrap( Session.class );
for(Person person : (List<Person>) session.createQuery("select p from Person p").list()) {
    dtos.add(toDTO(person));
    session.evict( person );
}

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2017-10-11 18:58:20

Stack Overflow用户

发布于 2017-10-12 07:38:41

使用evict,您可以告诉hibernate从第一级缓存上下文中删除一个实体,并且和所有其他操作一样(持久化、更新、删除等等)。可以与一段特殊关系中的所有孩子联系在一起。

因此,当您在定义此关系的实体上调用evict时,

代码语言:javascript
复制
<set name="details" cascade="evict">
  <key column="detailid"></key>
  <one-to-many class="com.intialize.example.Details"/>
</set>

hibernate也将删除所有相关的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46695350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档