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

时间:2015-04-07 01:06:05

标签: java spring hibernate jpa entitymanager

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

所以,例如,我有一个像这样的实体Test

    @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;
}

在我的情况下,我正在更新test2Collection条目的集合Test,最终我正在删除它的一些Test2条目。

来自merge的简单EntityManager方法在我调用它时通过新更新的Test条目时未检测到某些条目已被删除。

我想通过在更新数据库之前在test2Collection条目之间进行差异并使用要更新的新Test条目来跟踪Test中已删除的条目。

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

1 个答案:

答案 0 :(得分:2)

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

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