休眠 hbm 文件中 cascade=evict 的用法是什么
what is the usage of cascade=evict in hibernate hbm file
谁能解释一下休眠映射文件中 cascade = "evict"
的用法。
映射文件摘录:
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>
Evict 与 DETACH 相同,已弃用。
请参阅 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。驱逐实体
当调用 flush() 方法时,实体的状态与数据库同步。如果您不希望发生这种同步,或者如果您正在处理大量对象并且需要有效地管理内存,可以使用 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 );
}
希望对您有所帮助。
来自 Hibernate Javadocs:
This operation [evict()
] cascades to associated instances if the association is mapped with cascade="evict"
.
使用 evict,您告诉 hibernate 从一级缓存上下文中删除一个实体,并且像所有其他操作(持久化、更新、删除等...)一样,可以级联到特定关系的所有子级...
因此,当您对定义此关系的实体调用逐出时
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>
hibernate 也将驱逐所有关联的详细信息
谁能解释一下休眠映射文件中 cascade = "evict"
的用法。
映射文件摘录:
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>
Evict 与 DETACH 相同,已弃用。
请参阅 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。驱逐实体 当调用 flush() 方法时,实体的状态与数据库同步。如果您不希望发生这种同步,或者如果您正在处理大量对象并且需要有效地管理内存,可以使用 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 );
}
希望对您有所帮助。
来自 Hibernate Javadocs:
This operation [
evict()
] cascades to associated instances if the association is mapped withcascade="evict"
.
使用 evict,您告诉 hibernate 从一级缓存上下文中删除一个实体,并且像所有其他操作(持久化、更新、删除等...)一样,可以级联到特定关系的所有子级...
因此,当您对定义此关系的实体调用逐出时
<set name="details" cascade="evict">
<key column="detailid"></key>
<one-to-many class="com.intialize.example.Details"/>
</set>
hibernate 也将驱逐所有关联的详细信息