当父母保持保留状态时,如何在Hibernate中的OneToOne关系中删除孤儿?

时间:2018-12-16 11:30:45

标签: hibernate jpa entity

我有一个具有以下字段的父母...

@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);时,子项将不会被删除。显然,Hibernate不够聪明,无法识别出旧的关系已被删除。如果我setPhotoData(null)没有对子节点执行任何操作,则在更新父实体后,该子节点将永远保留在数据库中。

这是@OneToOne关系,因此我无法对此进行clear()。我怀疑将孩子的所有字段都设置为null是否是删除该孤儿的正确方法(由于所有非null字段,这是不可能的),但是这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

显然,它可以与FetchType.EAGER一起使用。对我来说似乎是个虫子。