2017-09-13 12 views
0

データベースからエンティティを削除する際に問題があります。とにかく私が何をしても、それは削除されません。SpringデータJPAでエンティティが削除されない

ドライバー・クラス

@Entity 
@Table(name = "drivers") 
public class Driver { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy = "driver", fetch = FetchType.EAGER) 
    @JsonSerialize(using = RatingsSerializer.class) 
    private List<Rating> ratings; 

    // other fields. Getters and Setters... 
} 

評価クラス

@Entity 
@Table(name = "ratings") 
@JsonDeserialize(using = RatingDeserializer.class) 
public class Rating { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "driver_id") 
    private Driver driver; 

    @ManyToOne 
    @JoinColumn(name = "client_id") 
    private Client client; 
    private int mark; 
    private Date createdAt; 

    //Getters and Setters ... 
} 
私は @OneToMany(mappedBy = "driver", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.REMOVE)とコール driverRepository.delete(driver)はそれがスローに ratingsに注釈を付けている何をすべきか

まず1:

org.postgresql.util.PSQLException: ERROR: update or delete on table "drivers" violates foreign key constraint "fk3raf3d9ucm571r485t8e7ew83" on table "ratings"

いいえ、別の方法を選択してください。 ratingRepositoryを使用して、各評価オブジェクトを削除しようとするが、決して起こらない、それだけで徹底し、各評価項目を反復処理し、再び

org.postgresql.util.PSQLException

次のステップをエラー投げることは、各評価項目クライアントとがnullにドライバ用に設定することでした。現在、ドライバエンティティはデータベースから削除されますが、レーティングエンティティはデータベースに残ります。 どうしますか?

春データJPAバージョン:1.5.7

答えて

2

それはあなたの外部キーエラーは、コードの行に応じてリンクされているクライアントのテーブルに関連していることになりますので、

@ManyToOne 
@JoinColumn(name = "client_id") 
private Client client; 

、アノテーション内にcascade = CascadeType.REMOVEを追加すると、アノテーションが機能する場合があります。しかし、それはあなたがクライアント行を含むカスケード上のすべてを削除したい場合はあなた次第です。そうでない場合は、その列の値を最初にNULLに更新します。

+0

ありがとうございました。 – GVArt

関連する問題