JPA 2.0 EntityManager 合并删除引用什么也不做

JPA 2.0 EntityManager merge remove a reference do nothing

我正在尝试使用合并从父实体中删除子项(不从数据库中删除引用),我所做的是从父项中获取@OneToMany 字段的集合,然后从集合中删除最后我使用合并,这在我使用相同的方法但添加而不是删除时有效,实体是:

@Entity
@Table(name="bills")
public class Bill {

    @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="bill")
    private Set<BillDetail> billDetails = new LinkedHashSet<>();

    ...
}

@Entity
@Table(name="billDetails")
public class BillDetail {

    @ManyToOne()
    @JoinColumn(name="bill")
    private Bill bill;

    ...
}

我进行合并的代码是:

Collection<Object> references = (Collection<Object>) PropertyUtils.getSimpleProperty(parentEntity, referenceField);
references.remove(childEntity); // the adding are the same, only i change remove for add here
PropertyUtils.setSimpleProperty(parentEntity, referenceField,references);

requirementCheck.setData(childEntity);

entityManager.getTransaction().begin();
entityManager.merge(parentEntity);
entityManager.getTransaction().commit();

entityManager.close(); 

所以我在删除时没有看到任何更新日志,我缺少什么?我在 class 上使用 @Transactional 进行合并,我同时使用 aspectj 和 Spring AOP(确保没有将 AOP 和 Aspectj 应用于同一方法)我也是使用 Hibernate

该关系由 BillDetail 实例拥有,因此对该关系的任何更改都需要更改 BillDetail,并且需要合并 BillDetail。

它在添加时起作用,因为合并能够级联关系,以便 BillDetail 中的更改也被合并。删除引用时,您会切断此引用,从而阻止级联选项找到您的 BillDetail 实例,因此您必须在清除其账单引用后手动调用合并。