0
我尝试使用Hibernate的注释与下面的实体来实现软删除:与级联Hibernate的软删除设置FK为NULL
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
...
@Column(name = "DELETED")
protected boolean deleted = false;
...
}
@Entity
@Table(name = "TARGET")
@Where(clause = "deleted = '0'")
@SQLDelete(sql = "UPDATE target SET deleted = '1'")
public class Target extends AbstractEntity {
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "TARGET_ID")
private Set<Recording> recordings;
...
}
@Entity
@Table(name = "RECORDING")
@Where(clause = "deleted = '0'")
@SQLDelete(sql = "UPDATE recording SET deleted = '1'")
public class Recording extends AbstractEntity {
...
@ManyToOne
@JoinColumn(name = "TARGET_ID")
private Target target;
...
}
缺失本身就是EntityManager的一个电话:
entityManager.remove(target);
在此调用之后,Target和其所有录制文件都将删除标志设置为TRUE,如预期的那样。 但录音也有TARGET_ID列设置为NULL,这是非常不幸的,因为关系丢失。这不是我所期望的,恢复状态是不可能的。 我期望TARGET_ID仍然持有对目标的引用。
我做错了什么?或者我必须手动删除每个录音而不使用级联?
用Spring Data JPA 1.11.4,Hibernate 5.0.12和JPA2.1完成。
感谢您的任何提示
这种关系就好了。通过这种方式,您可以在不需要额外努力的情况下管理双方的关系。 – user1622058