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

如何在保持父级的情况下,在Hibernate中删除OneToOne关系中的孤立项?

  •  0
  • Bevor  · 技术社区  · 6 年前

    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = true, orphanRemoval = true)
    @JoinColumn(name = "rcp_pf_id_photodata")
    private PersistableFile photoData;
    

    持久文件如下所示:

    @Entity
    @Table(name = "PERSISTABLE_FILE")
    public class PersistableFile
    {
        @SequenceGenerator(allocationSize=1, initialValue=1, sequenceName="persistablefile_pf_id_seq", name="persistablefile_pf_id_seq")
        @GeneratedValue(generator="persistablefile_pf_id_seq", strategy=GenerationType.SEQUENCE)
        @Id
        @Column(name = "pf_id")
        private Long pfId;
    
        @NotNull
        @Column(name = "pf_filename")
        private String filename;
    
        @NotNull
        @Column(name = "pf_content")
        private byte[] content;
    
        @NotNull
        @Column(name = "pf_filetype")
        private String filetype;
    
            //more code
    }
    

    当父文件被删除时,持久文件(子文件)也会被删除。这没关系。但当父母被保存下来,我 setPhotoData(null); setPhotoData(null) 在更新父实体之后,子实体将永远保留在数据库中。

    这是一段“一对一”的关系,所以我不能这么做 clear() 在上面。我怀疑将child的所有字段设置为null是否是删除孤立项的正确方法(这是不可能的,因为所有的字段都不是null),但是正确的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Bevor    6 年前

    很明显,它和 FetchType.EAGER . 在我看来像个虫子。