【问题标题】:JPA :: orphanRemoval and Lazy CollectionsJPA :: orphanRemoval 和 Lazy Collections
【发布时间】:2012-10-22 10:58:27
【问题描述】:

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

LAZY 集合的情况下,这将如何发挥作用?当 EntityManager 被要求合并修改后的 A 对象时,它如何区分从集合中显式删除的 B 实体与从未获取的 B 实体之间的区别LAZY 获取类型?

【问题讨论】:

    标签: jpa


    【解决方案1】:

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

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

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

    请停下来试试新的 JPA 实现,Batoo JPA http://batoo.jp - 比市场上当前的 JPA 实现快 15 倍以上。

    【讨论】:

    • 很清楚。 JPA 规范中是否定义了这种行为?
    • 没有那么详细。但这完全是从规范中推断出来的。
    • 这是否意味着将集合设置为 null 不会触发级联?
    猜你喜欢
    • 2019-08-11
    • 2015-06-05
    • 2013-09-19
    • 2017-07-12
    • 1970-01-01
    • 2011-12-09
    • 2013-10-18
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多