java - JPA 使用 oneToMany 正确添加和删除

标签 java jpa

给出以下结构

class Company {
    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true)
    List<Customer> customers;
}

class Customer {
    @ManyToOne
    @JoinColumn(name = "company_id")
    private Company company;
}

1) 创建公司:Company comp = new Company();

我现在的问题是如何正确添加客户:

客户客户 = new Customer(); cust.setCompany(comp);

这足够了吗?或者我是否将其添加到“两侧”?

cust.setCompany(comp); company.getCustomers.add(cust)

删除后同样薄吗?假设我要删除客户: 我删除了客户:entityManager.remove(cust)。这足够了吗? 或者我还需要执行 company.getCustomers().remove(cust) 吗?

最佳答案

如果这就足够了,完全取决于您的配置。例如实体管理器中附加或分离的对象。我假设您已分离对象(在我们的项目中通常是这种情况)。

Is this sufficient? Or do I add it to "both" sides?

不,不。

还不够,可以,但不必两边都加。您还可以重新加载分离的对象公司,它应该包含新客户。

删除的工作方式相同,当您重新加载公司对象时,它应该消失。

原因很简单:唯一的映射是在客户中,使用company_id。如果这个消失了,那么关系就消失了,但您仍然需要考虑缓存和内存。

关于java - JPA 使用 oneToMany 正确添加和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39242209/

相关文章:

java - 在 android studio 中构建应用程序时出现错误 org.gradle.execution.MultipleBuildFailures

java - 如何高效地为 MT20x 消息制作 Wrapper

jpa - 如何处理 org.eclipse.persistence.exceptions.OptimisticLockExceptionio

java - Java Spring 中是否有方法的注释可以用作触发器?

java - 保留实体中可嵌入的列表

Java8 Stream 作为一个整体映射到一个 Function

java - E/AndroidRuntime : FATAL EXCEPTION: main PID: 19302 java. lang.RuntimeException:无法启动 Activity ComponentInfo

java - 如何从 SQLite 随机设置文本到按钮而不重复?

java - 序列化 JPA 实体中未映射的属性

jpa - 具有 @ManyToOne 关系的 QueryDSL 投影