代码之家  ›  专栏  ›  技术社区  ›  Greggy

一对一关系,级联删除两边

  •  2
  • Greggy  · 技术社区  · 6 年前

    我有一个基于Jhipster生成器的项目。我有两个实体:模式和文件。一个模式只有一个文件,并且一个文件只能附加到一个模式。所以我认为这是典型的一对一关系。当删除关系的一侧时,如何删除其他实体?我的意思是:当我删除模式时,我也要删除文件。另外,当我删除文件时,我想删除模式。 我有这样的想法:

    public class Pattern implements Serializable {
        @OneToOne(mappedBy = "entityPattern")
        @OnDelete(action = OnDeleteAction.CASCADE)
        @JsonIgnore
        private File file;
    }
    

    public class File implements Serializable {
        @OneToOne(cascade=CascadeType.REMOVE, orphanRemoval = true)
        @JoinColumn(unique = true)
        private Pattern pattern;
    }
    

    但它不起作用。我有org.springframework.dao.dataIntegrityViolationException异常,这是由约束冲突引起的。

    1 回复  |  直到 6 年前
        1
  •  2
  •   user10639668    6 年前

    这应该有效:

    public class Pattern implements Serializable {
        @OneToOne(mappedBy = "pattern",cascade = CascadeType.REMOVE)
        @JsonIgnore
        private File file;
    }
    
    public class File implements Serializable {
        @OneToOne(cascade=CascadeType.REMOVE, orphanRemoval = true)
        @JoinColumn(unique = true)
        private Pattern pattern;
    }
    

    我只使用了JPA兼容的代码。