0
をNULLに設定します。Hibernateはソフト削除は、私は次のエンティティでHibernateのアノテーションを使用したソフトの削除を実装しようとしていFKは
@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とそのすべてのRecordingsの両方が、期待通りにTRUEに設定されたフラグを削除しました。 しかし、レコーディングのTARGET_ID列もNULLに設定されているため、関係が失われてしまいますので、非常に不幸です。これは私が期待しているものではなく、状態を復元することは不可能です。 TARGET_IDがTargetへの参照を保持していると思います。
何か間違っていますか?またはカスケードを使用せずに手動で各録音の削除を呼び出す必要がありますか?
Spring Data JPA 1.11.4、Hibernate 5.0.12、JPA2.1で終了しました。任意のヒントについて
おかげで、ターゲットからの録音に
関係はうまくいきます。この方法を使用すると、追加の労力をかけずに両側から関係を管理できます。 – user1622058