1
我有兩個實體類之間的下列雙向關係中刪除:級聯使用Spring數據JPA(雙向)
用戶
@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
與級聯刪除與用戶相關的所有圖書。然而,當我使用一個Spring數據CrudRepository
:
myDAO.delete(String userId) // interface extending CrudRepository<User, UserPK>
我越來越:
Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; FK_IN88FEHUXOOYQK0YE71USPIEP table: USER
我試圖用orhpanRemoval
,都挺CascadeTypes
都org.hibernate
和javax.persistence
。我不想實現像@Query(Delete from User....)
這樣的本機查詢我想知道異常說明外鍵沒有動作是否直接指定級聯選項。
如何生成數據庫模式?爲什麼你從'Book'到'User'有'@Cascade(CascadeType.REMOVE)'?當然,當你刪除那本書(或者你)時,你不想刪除所有擁有'Book'的'用戶',因爲這就是級聯所要做的。 – manish
嗨@manish,我已經從書中刪除級聯,仍然沒有改變。至於架構我沒有使用任何的SQL腳本,我創建LocalContainerEntityManagerFactoryBean與設置爲「更新」標誌「hibernate.hbm2ddl.auto」。 – ServerSideCat