【发布时间】:2011-12-19 23:03:57
【问题描述】:
我很难理解从 OneToMany 关系中删除实体所需的最小努力。我发现很多例子只是将实体添加到这些集合中(这很好),但删除实体更难找到。
我有以下课程:
@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 可以为我做到这一点。
【问题讨论】:
-
你尝试过这两种技术吗?它有什么作用?