1

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

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

4

1 回答 1

3

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

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

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

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

于 2012-11-01T22:32:07.167 回答