假设我有一个实体 A , OneToMany Bs 的集合 FetchType EAGER 和 orphanRemoval 设置为 true 。当我在分离的 A 对象上调用 EntityManager#merge 并删除其集合中的某些 B 元素时(分离时),相应的从数据库中删除行(其集合中现在缺少的实体)(在JPA / Hibernate中)。
在 LAZY 收藏品的情况下,究竟会如何发挥作用?当要求 EntityManager 合并修改后的 A 对象时,它如何区分从集合中明确删除的B实体与从未提取的B实体之间的区别 LAZY 获取类型?
答案 0 :(得分:3)
JPA实现必须保留已初始化或仍处于惰性状态的集合的标志。
因此,如果合并先前分离的实体,则合并操作将检查集合,如果仅它已初始化,则它将枚举内容以查找针对从数据库获取的实体的更改。
但是,如果您实例化一个新实例并将其传递给合并,那么该集合将被视为已初始化,如果该集合为空,则JPA将删除所有集合项。
请停下来尝试新的JPA实施,Batoo JPA http://batoo.jp - 这比目前市场上的JPA实施快15倍。