首页 > 解决方案 > 如何在 JPA 中使用 @onetomany 关系更新实体

问题描述

我使用树结构和使用@ManyToOne 和@OneToMany 注释的父子关系创建了一个实体。但是,只有我对实体父级所做的更改才会在数据库中处理。

我的实体类如下所示:

@Entity
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class OKR {

    @Id
    @Column(name = "ID")
    @GeneratedValue
    private UUID id;
    @NotBlank
    private String name;


    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "parentid", referencedColumnName = "id")
    private OKR parent;


    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private List<OKR> children;
    private boolean isRoot;

    public OKR(String name, OKR parent, List<OKR> children){
        this.name = name;
        this.children = children;
        if (this.children==null){
            this.children = new ArrayList<>();
        }
        this.parent = parent;

        if (parent == null||parent.equals(new UUID(0,0))){
            isRoot = true;
        }else{
            isRoot = false;

        }
    }

    protected OKR(){
        isRoot = true;
        children = new ArrayList<>();
    }

当我通过更改其父级来更新 OKR 时,父级 OKR 也会更新。但是,当我仅通过添加一个子项来更新 OKR 时,子项 OKR 不会得到更新。我对 JPA 还很陌生,而且我还注意到我的数据库中没有儿童表。所以我的问题是只更新实体的子级时更新所有关系的最简单方法是什么?

标签: spring-boothibernatejpahibernate-onetomany

解决方案


推荐阅读