【问题标题】:removing entities in OneToMany with RequestFactory & JPA使用 RequestFactory 和 JPA 删除 OneToMany 中的实体
【发布时间】:2025-11-25 16:50:01
【问题描述】:

我想知道使用 RequestFactory 从 GWT 中的一对多关系中删除孩子的正确方法是什么。

我的 GWT 应用程序带有一个名为 Product 的实体,并且该产品与 Expert 具有一对多的关系:

@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(name = "EXPERT")
public class Expert {
    ...
    @ManyToOne(optional=false)
    Product product;
    ...
}

我有一个用户界面,您可以在其中更改 Product 的某些值,还有一个可以添加或删除专家的窗口。添加专家进展顺利,但如何删除专家?我必须在客户端和服务器端进行哪些管理?

我已经有一个打开的 productRequest 正在进行中。

【问题讨论】:

标签: java gwt jpa requestfactory


【解决方案1】:

我也回答了你的 JPA 问题。

根据我过去的经验,在 Hibernate 中删除处于父子双向关系中的孩子可能非常棘手。

我通常做的是使用单向映射,即产品不包含专家集。但是您可以实现一个 getter 来获取所有使用 Hibernate 调用的专家。优点是:

  1. 更轻松的映射
  2. 更容易编码
  3. 可管理的行为

您可以随时返回并在稍后阶段实现缓存或预取。而且大多数时候它们是不必要的过早优化。

【讨论】:

  • 我终于设法让一切正常工作,但正如您所说,它可能非常棘手,看起来清晰易懂,但在实践中可能很难。我确信在下一个项目中我会更仔细地选择我的关系,因为实施比预期的更困难(或限制)。