2311061111-lyt/src/main/java/com/vibevault/model/Playlist.java
liyitian a120406357
Some checks failed
autograde-final-vibevault / check-trigger (push) Successful in 13s
autograde-final-vibevault / grade (push) Failing after 49s
完成作业
2025-12-14 15:54:00 +08:00

93 lines
1.9 KiB
Java

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