diff --git a/src/main/java/com/vibevault/model/Song.java b/src/main/java/com/vibevault/model/Song.java index 953c654..ec3f168 100644 --- a/src/main/java/com/vibevault/model/Song.java +++ b/src/main/java/com/vibevault/model/Song.java @@ -4,14 +4,18 @@ import jakarta.persistence.*; /** * 歌曲实体类 - * - * 需要实现: + * + * 需要实现: * - 将此类映射为数据库表 "songs" * - id 作为自增主键 * - 每首歌曲属于一个歌单(多对一关系) */ +@Entity // 实现:将此类映射为数据库表 +@Table(name = "songs") // 实现:指定表名为"songs" public class Song { + @Id // 实现:标记id为主键 + @GeneratedValue(strategy = GenerationType.IDENTITY) // 实现:id作为自增主键 private Long id; private String title; @@ -20,33 +24,63 @@ public class Song { private int durationInSeconds; + // 实现:每首歌曲属于一个歌单(多对一关系) + @ManyToOne(fetch = FetchType.LAZY, optional = false) // 多对一,歌单不能为空 + @JoinColumn(name = "playlist_id") // 数据库中关联歌单的字段名 private Playlist playlist; + // JPA必须的无参构造(protected改为public,方便测试) public Song() { } + // 适配测试代码的构造方法(不带Playlist参数) public Song(String title, String artist, int durationInSeconds) { this.title = title; this.artist = artist; this.durationInSeconds = durationInSeconds; } + // 业务用的构造方法(带Playlist参数) + public Song(String title, String artist, int durationInSeconds, Playlist playlist) { + this.title = title; + this.artist = artist; + this.durationInSeconds = durationInSeconds; + this.playlist = playlist; + } + + // 必要的getter/setter方法 public Long getId() { return id; } + public void setId(Long id) { + this.id = id; + } + public String getTitle() { return title; } + public void setTitle(String title) { + this.title = title; + } + public String getArtist() { return artist; } + public void setArtist(String artist) { + this.artist = artist; + } + public int getDurationInSeconds() { return durationInSeconds; } + public void setDurationInSeconds(int durationInSeconds) { + this.durationInSeconds = durationInSeconds; + } + public Playlist getPlaylist() { return playlist; } @@ -54,4 +88,4 @@ public class Song { public void setPlaylist(Playlist playlist) { this.playlist = playlist; } -} +} \ No newline at end of file