java - 删除某些条目时更新数据库 JPA

标签 java spring hibernate jpa entitymanager

我正在项目的服务器端开发一个逻辑,该逻辑将更新数据库中的实体。但是这个实体引用了另一个实体的列表。

因此,例如我有一个像这样的实体测试:

    @Entity
    public class Test {

        @Id
        @Column(name = "idTest", nullable = false)
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        private String name;

        @OneToMany(mappedBy = "idTest", targetEntity = Test2.class, fetch = FetchType.LAZY)
        private Collection<Test2> test2Collection;
    }

其中引用了 Test2 实体。

@Entity
public class Test2 {

    @Id
    @Column(name = "idTest2", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String field1;
    private String field2;

    @ManyToOne
    @JoinColumn(name = "idTest", referencedColumnName = "idTest")
    private Test idTest;
}

就我而言,我正在更新 Test 条目的 Collection test2Collection ,并最终删除其中的一些 Test2 条目.

当我调用传递新更新的Test 条目时,EntityManager 中的简单merge 方法不会检测到某些条目已被删除。

我想通过在使用新的 Test 更新数据库之前在 Test 条目之间进行比较来跟踪从 test2Collection 中删除的条目条目待更新。

但我不确定这是唯一(也是最好)的方法。还有人有其他想法吗?

最佳答案

在你的关系中,你必须添加orphanRemoval,那么如果你删除集合中的一个元素并持久化Test,集合上删除的元素将自动删除Test2表。

@OneToMany(orphanRemoval = true, mappedBy = "idTest", targetEntity = Test2.class, fetch = FetchType.LAZY)
    private Collection<Test2> test2Collection;

关于java - 删除某些条目时更新数据库 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482073/

相关文章:

java - 确保java中的完整数组

java - Java中字符串转换为日期时出错

java - 未填写所有 Spring 表单字段并收到错误请求错误 400

java - 两个 spring boot 应用程序相互之间通过消息队列进行通信

Spring Security 3.1 注销后重定向

java - 找不到类 : javax. persistence.spi.ProviderUtil

java - 如何使用JAVA UUID中的.net GUID作为mongodb集合的主键

java - 如何根据给定模式重新排列列表中的项目?

java - 使用 hibernate3 和 struts2

javascript - 端点握手异常