2311061234/src/main/java/com/vibevault/model/Playlist.java

91 lines
2.3 KiB
Java
Raw Normal View History

2025-12-23 19:17:44 +08:00
package com.vibevault.model;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
/**
* 歌单实体类
*
* 需要实现:
* - 将此类映射为数据库表 "playlists"
* - id 作为自增主键
* - name 不能为空
* - 每个歌单属于一个用户多对一关系
* - 一个歌单包含多首歌曲一对多关系
* - 删除歌单时应级联删除其中的歌曲
*/
@Entity // 实现:将此类映射为数据库表
@Table(name = "playlists") // 实现:指定表名为"playlists"
public class Playlist {
@Id // 实现标记id为主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 实现id作为自增主键
private Long id;
@Column(nullable = false) // 实现name不能为空
private String name;
// 实现:每个歌单属于一个用户(多对一关系)
@ManyToOne(fetch = FetchType.LAZY, optional = false) // 多对一,用户不能为空
@JoinColumn(name = "user_id") // 数据库中关联用户的字段名
private User owner;
// 实现:一个歌单包含多首歌曲(一对多关系) + 删除歌单时级联删除歌曲
@OneToMany(mappedBy = "playlist", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Song> songs = new ArrayList<>();
public Playlist() {
}
// 带参数的构造方法(方便创建歌单)
public Playlist(String name, User owner) {
this.name = name;
this.owner = owner;
}
// 维护双向关系:添加歌曲到歌单
public void addSong(Song song) {
songs.add(song);
song.setPlaylist(this);
}
// 维护双向关系:从歌单移除歌曲
public void removeSong(Song song) {
songs.remove(song);
song.setPlaylist(null);
}
// 必要的getter/setter方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
public List<Song> getSongs() {
return songs;
}
public void setSongs(List<Song> songs) {
this.songs = songs;
}
}