2016-08-23 23 views
0

を削除し、私は次のエンティティを持っている:カスケードは休止状態/春データに

@Entity 
public class Car { ... } 

@Entity 
public class Driver { 
    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name = "CAR_ID") 
    private Car car; 

    ... 
} 

@Entity 
public class Penalty { 
    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="D_ID") 
    private Driver driver; 

    ... 
} 

私はDriverCarcarRepository.delete(car_id)として削除されたときに削除Penaltyからすべての情報をしたいと思います。

WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1451, SQLState: 23000 
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Cannot delete or update a parent row: a foreign key constraint fails (`test`.`car_drivers`, CONSTRAINT `FK9ux9oqx6yr66cva4ro6l8m63r` FOREIGN KEY (`CAR_ID`) REFERENCES `cars` (`CAR_ID`)) 
ERROR: org.hibernate.internal.ExceptionMapperStandardImpl - HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement] 
ERROR: com.app.cars.controller.AdminController - Exception during deleting car due to could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement 

テーブルの属性とデザインを変更することはできません。したがって、エンティティモデルを修正することによってこのエラーを取り除く必要があります。

答えて

1

エンティティモデルでは、Driver、次にPenaltyにカスケード削除されないため、データベースで制約違反エラーが発生します。モデルは次のようにする必要があります:

@Entity 
class Car { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "car", orphanRemoval = true) 
    private Set<Driver> drivers; 

    ... 
} 

@Entity 
class Driver { 
    @ManyToOne 
    private Car car; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "driver", orphanRemoval = true) 
    private Set<Penalty> penalties; 

    ... 
} 

@Entity 
class Penalty { 
    @ManyToOne 
    private Driver driver; 

    ... 
} 
+0

問題は、ドライバーが車からアクセスできないことです。そのため、Carにはdriversという属性がありません。 – nlimits

+0

なぜアクセスできないのですか?あなたは単にそれらを追加することができます。エンティティクラスは 'public'でなければならないので、どこからでもアクセスできます。 – manish