这非常令人困惑,我找不到解决方案。.我一直在寻找小问题的解决方案,然后又出现了新的问题。我需要能够删除该实体,但是每当我使用该方法时,它什么都不做。
我有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;
相册: 公共类Album扩展了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或album_id,以及所有4上的track_description或album_description。
我可以编辑专辑并替换其中的曲目。但是我无法删除相册。为什么?当我使用方法“ albumRepository.delete(deleteAlbum);”时,阻止JPA执行此操作的原因是什么?或“ jpaRepository.delete(entity)”?
答案 0 :(得分:1)
只要有一个Artist实例引用一个Album实例,就不能删除Album实例。您需要先从歌手中删除专辑。
通常,使用批注中的CascadeType,您可以控制要删除的类的子级或在何处删除子级。参见this tutorial
答案 1 :(得分:0)
您确定要删除的专辑没有与之相关的歌手吗?如果没有,那么您应该可以删除。如果有一些艺术家,那么您将无法做到。
另一方面,如果您删除某个艺术家,则该艺术家的所有专辑都应删除。