簡體   English   中英

為什么我不能在 JPA 中刪除這個實體?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM