(双方向)春データJPAで削除カスケード:私は2つのエンティティクラスの間に次の双方向の関係を持っている
ユーザー
@Entity
@Table(name = "USER")
public class User {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
@Cascade({CascadeType.REMOVE, CascadeType.SAVE_UPDATE})
private Set<Book> books;
}
を本
@Entity
@Table(name = "BOOKS")
public class Book {
@ManyToOne(optional = false)
@JoinColumns({
@JoinColumn(name = "ID", referencedColumnName = "ID"),
@JoinColumn(name = "NAME", referencedColumnName = "NAME"),
})
private User user;
}
私がダウンして、ユーザーに関連付けられているすべての書籍に削除カスケードでUser
を削除したいです。私は春データCrudRepository
使用する場合ただし、:
myDAO.delete(String userId) // interface extending CrudRepository<User, UserPK>
を私が取得しています:私はorhpanRemoval
を使用しようとしていた
Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; FK_IN88FEHUXOOYQK0YE71USPIEP table: USER
、CascadeTypes
両方org.hibernate
とjavax.persistence
のすべての種類。私は@Query(Delete from User....)
のようなネイティブクエリを実装したくありません私は直接例外カスケードオプションを指定するかどうかは、例外文外部キーのないアクションかどうか疑問に思っています。
データベーススキーマはどのように生成されますか? 'Book'から' User'まで '@Cascade(CascadeType.REMOVE)'を持っているのはなぜですか?確かに、そのブックを削除したときに(またはあなたの) 'カスケード(Cascade) 'が行うことになるので、'ブック(Book)'を持つ 'User'sをすべて削除したくないのです。 – manish
こんにちは@manish、私はBookからカスケードを削除しましたが、何も変更されていません。スキーマは、私はSQLスクリプトのいずれかを使用していないとして、私は "更新"に設定されているフラグ "hibernate.hbm2ddl.auto"でLocalContainerEntityManagerFactoryBeanを作成しています。 – ServerSideCat