2017-10-07 14 views
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で終了しました。任意のヒントについて

おかげで、ターゲットからの録音に

答えて

0

あなたの@OneToMany関係がincoretly設定されています。試してください:

@OneToMany(mappedBy="target", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
private Set<Recording> recordings; 
+0

関係はうまくいきます。この方法を使用すると、追加の労力をかけずに両側から関係を管理できます。 – user1622058

関連する問題