JPA :: orphanRemoval和Lazy Collections

时间:2012-11-01 19:27:24

标签: jpa

假设我有一个实体 A OneToMany Bs 的集合 FetchType EAGER orphanRemoval 设置为 true 。当我在分离的 A 对象上调用 EntityManager#merge 并删除其集合中的某些 B 元素时(分离时),相应的从数据库中删除行(其集合中现在缺少的实体)(在JPA / Hibernate中)。

LAZY 收藏品的情况下,究竟会如何发挥作用?当要求 EntityManager 合并修改后的 A 对象时,它如何区分从集合中明确删除的B实体与从未提取的B实体之间的区别 LAZY 获取类型?

1 个答案:

答案 0 :(得分:3)

JPA实现必须保留已初始化或仍处于惰性状态的集合的标志。

因此,如果合并先前分离的实体,则合并操作将检查集合,如果它已初始化,则它将枚举内容以查找针对从数据库获取的实体的更改。

但是,如果您实例化一个新实例并将其传递给合并,那么该集合将被视为已初始化,如果该集合为空,则JPA将删除所有集合项。

请停下来尝试新的JPA实施,Batoo JPA http://batoo.jp - 这比目前市场上的JPA实施快15倍。