【发布时间】:2014-03-24 17:08:23
【问题描述】:
我遇到以下问题:
我有 3 个 Pojo 的
- 艺术家
- 专辑
- 跟踪
Artist 与 Album 具有 OneToMany 关系,Album 与 Track 具有 OneToMany 关系。
艺术家.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;
专辑.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;
Track 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;
}
跟踪服务.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 只是给了我很多选择语句作为输出。
感谢您提供任何帮助,如果您需要我提供更多信息,请随时询问。
【问题讨论】:
-
你能发布你的删除方法吗?
-
你是否从专辑曲目列表中删除了曲目?
-
我的删除方法只是我从 spring-data 中使用的存储库。 @Repository 公共接口 TrackRepository extends CrudRepository
-
我也有同样的问题。你找到让它工作的方法了吗?
-
有一段时间了,但我认为我得到这个工作的方式是:
@OneTomany(mappedBy = album) List<track> 曲目; @ManyToOne @JoinColumn(name = "album_id") 私人相册专辑; </track>
标签: spring hibernate spring-data-jpa