有人能解释一下cascade = "evict"在hibernate映射文件中的用法吗?
映射文件摘录:
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>发布于 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中分离出来
for(Person person : entityManager.createQuery("select p from Person p", Person.class)
.getResultList()) {
dtos.add(toDTO(person));
entityManager.detach( person );
}例330。将实体从Hibernate会话中逐出
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 );
}希望这能有所帮助。
发布于 2017-10-11 18:58:20
来自Hibernate Javadocs:
如果关联是用
evict()映射的,则此操作[https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#evict(java.lang.Object%29](https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#evict(java.lang.Object%29)将级联到关联实例。
发布于 2017-10-12 07:38:41
使用evict,您可以告诉hibernate从第一级缓存上下文中删除一个实体,并且和所有其他操作一样(持久化、更新、删除等等)。可以与一段特殊关系中的所有孩子联系在一起。
因此,当您在定义此关系的实体上调用evict时,
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>hibernate也将删除所有相关的细节。
https://stackoverflow.com/questions/46695350
复制相似问题