我有一个具有以下字段的父母...
@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字段,这是不可能的),但是这样做的正确方法是什么?
答案 0 :(得分:0)
显然,它可以与FetchType.EAGER
一起使用。对我来说似乎是个虫子。