2017-02-08 10 views
1

は、私は次のように奇妙な問題を抱えています。私はそう@OnDelete(CASCADE)双方向マッピングに動作していない(休止状態)

@Data 
@Entity 
public class Device { 

    @OneToMany(mappedBy = "device") 
    private Collection<Container> containers = new ArrayList<>(); 

} 


@Data 
@Entity 
public class Container { 

    @ManyToOne 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    private Device device; 

} 

のような双方向のマッピングを定義する場合、コンテナ表の外部キー制約はON DELETE CASCADEで作成されないため、デバイスを削除すると、そのコンテナは削除されません。

しかし私はそう

@Data 
@Entity 
public class Device { 
} 


@Data 
@Entity 
public class Container { 

    @ManyToOne 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    private Device device; 

} 

ON DELETE CASCADEセットで期待通りに制約が生成されますようにマッピング一方向を作る場合。

@Cascade(CascadeType.DELETE)でデバイス側のカスケードを設定し、@OnDeleteを削除すると、カスケードは機能しますが、データベースに物理的な制約がなくても休止状態になります。

何か間違っていますか?私は@OnDeleteを片方向マッピングでのみ使うべきですか?これはバグですか?

よろしく デビッド

答えて

3

私は同様の問題が発生したトライアウトとデバッグのいくつかの時間後、私は少し非自明なものを考え出し:多く黙っ書き換え、あなたは双方向の関係を構築しています1つの側の制約。働い

@Data 
@Entity 
public class Device { 

    @OneToMany(mappedBy = "device") 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    private Collection<Container> containers = new ArrayList<>(); 

} 


@Data 
@Entity 
public class Container { 

    @ManyToOne 
    private Device device; 

} 
+0

おかげで、:したがって、あなたはこのように他の側にOnDeleteを指定する必要があります!しかし、奇妙な行動。 – deekay

関連する問題