Spring Data JPA/Hibernate OneToMany 删除 ManyToOne 子项

4
我遇到了以下问题:
我有三个POJO:
  • Artist(艺术家)
  • Album(专辑)
  • Track(曲目)
其中,艺术家与专辑之间存在OneToMany关系,专辑与曲目之间也存在OneToMany关系。
Artist.class:
@Entity
public class Artist {

    @Id
    @GeneratedValue
    @Column(name = "artist_id")
    private long artist_id;

    @Column(name = "artist_name", nullable = false, length = 32)
    private String artist_name;

    @Column(name = "artist_bio", nullable = false, length = 255)
    private String artist_bio;

    @Lob
    @Basic(fetch = FetchType.EAGER)
    @Column(name = "artist_avatar")
    private byte[] artist_avatar;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "artist", orphanRemoval = true)
    private List<Album> albumList;

Album.class

@Entity
public class Album {

    @Id
    @GeneratedValue
    @Column(name = "album_id")
    private long album_id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "artist_id", nullable = false)
    private Artist artist;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "album", orphanRemoval = true)
    private List<Track> trackList;

    @Column(name = "album_name", nullable = false, length = 32)
    private String album_name;

    @Column(name = "album_description", nullable = false, length = 255)
    private String album_description;

    @Lob
    @Basic(fetch = FetchType.EAGER)
    @Column(name = "album_avatar")
    private byte[] album_avatar;

Track.class

@Entity
public class Track {

    @Id
    @GeneratedValue
    @Column(name = "track_id")
    private long track_id;

    @Column(name = "track_no", nullable = false, length = 2)
    private String track_no;

    @Column(name = "track_name", nullable = false, length = 32)
    private String track_name;

    @Column(name = "track_length", nullable = false, length = 32)
    private String track_length;

    @Column(name = "track_file", nullable = false, length = 128)
    private String track_file;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "album_id", nullable = false)
    private Album album;

跟踪Controller.class

@RequestMapping(value = "/track", params = "delete", method = RequestMethod.POST)
@Transactional
public String postDeleteTrack(@RequestParam Long album_id, Long track_id) {
    trackService.deleteTrack(track_id);
    return "redirect:album/" + album_id;
}

追踪 Service.class

public void deleteTrack(Long track_id) {
    trackRepository.delete(track_id);
}

TrackRepository.class

@Repository
public interface TrackRepository extends CrudRepository<Track, Long>{
}

当我调用trackService.deleteTrack(track_id);时,我的MySQL数据库中的轨迹未被删除。Hibernate只是输出大量的select语句。
如有需要,请告知更多信息,感激不尽。

你能发一下你的删除方法吗? - Prasad
你从专辑曲目列表集合中移除了这个曲目吗? - Prasad
我的删除方法只是我从spring-data使用的存储库。@Repository public interface TrackRepository extends CrudRepository<Track, Long>{ }你能稍微解释一下你所说的删除专辑trackList集合的意思吗?我对像hibernate这样的ORM框架没有太多经验。 - Vinchenzo
我有同样的问题。你找到让它工作的方法了吗? - Garcia Julien
已经有一段时间了,但我认为我让它工作的方式是通过以下代码:<pre> <code> @OneToMany(mappedBy = album) List<Track> tracks; @ManyToOne @JoinColumn(name = "album_id") private Album album; </pre> </code> - Vinchenzo
是的,请看我的上一个评论。它也解决了你的问题吗? - Vinchenzo
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接