gpt4 book ai didi

java - 删除 OneToMany 关系中的实体

转载 作者:行者123 更新时间:2023-12-04 06:09:22 26 4
gpt4 key购买 nike

我无法理解从 OneToMany 关系中删除实体所需的最小努力。我发现很多示例只是将实体添加到这些集合中(并且效果很好),但是删除实体要困难得多。

我有以下类(class):

@Entity
public class Product {
...
OneToMany(mappedBy="product", orphanRemoval=true,
cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch=FetchType.EAGER)
Set<Expert> experts = new HashSet<Expert>();
...
}

@Entity
public class Expert {
...
@ManyToOne(optional=false)
Product product;

@ManyToOne(optional=false)
Person person;

...
}

(人类似于产品)

我有很多产品和专家。我想从产品列表中删除专家,以便完全删除专家实体。我希望以下代码就足够了:
Product aProduct = findAProduct(...);
Expert anExpert aProduct.getExperts.get(...); // Just get the first expert that I want removed
EntityManager em = entityManager();

em.getTransaction().begin();
aProduct.getExperts().remove(anExpert);
em.merge(aProduct);
em.getTransaction().commit();

或者:
  em.getTransaction().begin();
em.remove(anExpert);
em.getTransaction().commit();

这是不是太简单了? JPA 做了什么,我自己必须做什么?我之前只使用查询就解决了这个问题,但我希望 JPA 可以为我做到这一点。

最佳答案

尝试:

em.getTransaction().begin();
aProduct = em.merge(aProduct);
aProduct.getExperts().remove(anExpert);
em.getTransaction().commit();

问题在于合并操作,而不是删除。

关于java - 删除 OneToMany 关系中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com