2311061111-lyt/src/main/java/com/vibevault/model/Playlist.java

93 lines
1.9 KiB
Java
Raw Normal View History

2025-12-14 15:04:22 +08:00
package com.vibevault.model;
import jakarta.persistence.*;
2025-12-14 15:54:00 +08:00
import jakarta.validation.constraints.NotEmpty;
2025-12-14 15:04:22 +08:00
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 歌单实体类
*
* 需要实现
* - 将此类映射为数据库表 "playlists"
* - id 作为自增主键
* - name 不能为空
* - 每个歌单属于一个用户多对一关系
* - 一个歌单包含多首歌曲一对多关系
* - 删除歌单时应级联删除其中的歌曲
*/
2025-12-14 15:54:00 +08:00
@Entity
@Table(name = "playlists")
2025-12-14 15:04:22 +08:00
public class Playlist {
2025-12-14 15:54:00 +08:00
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
2025-12-14 15:04:22 +08:00
private Long id;
2025-12-14 15:54:00 +08:00
@Column(nullable = false)
@NotEmpty(message = "歌单名称不能为空")
2025-12-14 15:04:22 +08:00
private String name;
2025-12-14 15:54:00 +08:00
@ManyToOne
@JoinColumn(name = "owner_id", nullable = false)
2025-12-14 15:04:22 +08:00
private User owner;
2025-12-14 15:54:00 +08:00
@OneToMany(mappedBy = "playlist", cascade = CascadeType.ALL, orphanRemoval = true)
2025-12-14 15:04:22 +08:00
private List<Song> songs = new ArrayList<>();
protected Playlist() {
}
public Playlist(String name, User owner) {
this.name = name;
this.owner = owner;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
2025-12-14 15:54:00 +08:00
public void setOwner(User owner) {
this.owner = owner;
}
public void setId(Long id) {
this.id = id;
}
2025-12-14 15:04:22 +08:00
public User getOwner() {
return owner;
}
public List<Song> getSongs() {
return Collections.unmodifiableList(songs);
}
/**
* 向歌单添加歌曲
* 提示需要维护双向关系
*/
public void addSong(Song song) {
2025-12-14 15:54:00 +08:00
songs.add(song);
song.setPlaylist(this);
2025-12-14 15:04:22 +08:00
}
/**
* 从歌单移除歌曲
* 提示需要维护双向关系
*/
public void removeSong(Song song) {
2025-12-14 15:54:00 +08:00
songs.remove(song);
song.setPlaylist(null);
2025-12-14 15:04:22 +08:00
}
}