[英]Why can't I delete this entity in JPA?
這很混亂,我找不到解決方案。我一直在尋找小問題的解決方案,然后出現新的問題。 我需要能夠刪除這個實體,但是每當我使用那個方法時,它什么都不做..
我有 4 個實體,它們是: 類型:
public class Genre extends MusicEntity {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "genre_id")
private List<Artist> artistList;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "genre_id")
private List<Album> albumList;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "genre_id")
private List<Track> trackList;
藝術家:
public class Artist extends MusicEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "artist_id")
private List<Album> artistAlbumList;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "artist_id")
private List<Track> artistTrackList;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="genre_id")
private Genre genre;
private String image;
專輯:公共類專輯擴展 MusicEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "album_id")
private List<Track> trackList;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "artist_id")
private Artist artist;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "genre_id")
private Genre genre;
private String image;
追蹤:
public class Track extends MusicEntity {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "genre_id")
private Genre genre;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "album_id")
private Album album;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "artist_id")
private Artist artist;
所有 4 個擴展 MusicEntity 只包含 ID、EntityTitle 和 Description。 然后他們都有 AttributeOverrides 將他們的 ID 更改為 track_id 或專輯_id,以及所有 4 的 track_description 或專輯描述。
我可以編輯專輯並替換里面的曲目。 但我無法刪除相冊。 為什么? 當我使用“albumRepository.delete(deleteAlbum);”方法時,是什么阻止了 JPA 這樣做? 或“jpaRepository.delete(實體)”?
只要有一個 Artist 實例引用了 Album 實例,就不能刪除 Album 實例。 您需要先從藝術家中刪除專輯。
通常,通過注釋中的 CascadeType,您可以控制您刪除的類的子項或刪除子項的位置。 看這個教程
您確定沒有與您要刪除的專輯相關聯的藝術家嗎? 如果沒有,那么您應該可以刪除。 如果有一些藝術家,那么你將無法這樣做。
另一方面,如果您刪除某個藝術家,則該藝術家的所有專輯都應被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.