diff --git a/music-houduan/src/main/java/com/test/musichouduan/entity/Music.java b/music-houduan/src/main/java/com/test/musichouduan/entity/Music.java index f6e14c4..1dc279e 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/entity/Music.java +++ b/music-houduan/src/main/java/com/test/musichouduan/entity/Music.java @@ -91,7 +91,12 @@ public class Music { /** * 歌手列表 */ - @ManyToMany(mappedBy = "musics") + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable( + name = "music_singer", + joinColumns = @JoinColumn(name = "music_id"), + inverseJoinColumns = @JoinColumn(name = "singer_id") + ) private Set singers = new HashSet<>(); /** diff --git a/music-houduan/src/main/java/com/test/musichouduan/entity/Singer.java b/music-houduan/src/main/java/com/test/musichouduan/entity/Singer.java index 6372507..3b5dd89 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/entity/Singer.java +++ b/music-houduan/src/main/java/com/test/musichouduan/entity/Singer.java @@ -77,12 +77,7 @@ public class Singer { /** * 歌手关联的音乐 */ - @ManyToMany - @JoinTable( - name = "singer_music", - joinColumns = @JoinColumn(name = "singer_id"), - inverseJoinColumns = @JoinColumn(name = "music_id") - ) + @ManyToMany(mappedBy = "singers") private Set musics = new HashSet<>(); /** diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java index b9ab3fb..ae3ebcd 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java @@ -329,25 +329,22 @@ public class MusicServiceImpl implements MusicService { music.setSingers(singers); } else if (StringUtils.hasText(musicDTO.getSinger())) { // 如果有歌手名称字符串,则处理歌手名称 - String singerName = musicDTO.getSinger(); - // 查找是否已存在该歌手 - Optional existingSinger = singerRepository.findByName(singerName); - - if (existingSinger.isPresent()) { - // 如果歌手已存在,直接使用 - Set singers = new HashSet<>(); - singers.add(existingSinger.get()); - music.setSingers(singers); - } else { - // 如果歌手不存在,创建新歌手 - Singer newSinger = new Singer(); - newSinger.setName(singerName); - Singer savedSinger = singerRepository.save(newSinger); - - Set singers = new HashSet<>(); - singers.add(savedSinger); - music.setSingers(singers); + String[] singerNames = musicDTO.getSinger().split("[,,、]"); + Set singers = new HashSet<>(); + for (String singerName : singerNames) { + String trimmedName = singerName.trim(); + if (StringUtils.hasText(trimmedName)) { + Optional existingSinger = singerRepository.findByName(trimmedName); + if (existingSinger.isPresent()) { + singers.add(existingSinger.get()); + } else { + Singer newSinger = new Singer(); + newSinger.setName(trimmedName); + singers.add(singerRepository.save(newSinger)); + } + } } + music.setSingers(singers); } // 保存音乐 @@ -428,25 +425,22 @@ public class MusicServiceImpl implements MusicService { music.setSingers(singers); } else if (StringUtils.hasText(musicDTO.getSinger())) { // 如果有歌手名称字符串,则处理歌手名称 - String singerName = musicDTO.getSinger(); - // 查找是否已存在该歌手 - Optional existingSinger = singerRepository.findByName(singerName); - - if (existingSinger.isPresent()) { - // 如果歌手已存在,直接使用 - Set singers = new HashSet<>(); - singers.add(existingSinger.get()); - music.setSingers(singers); - } else { - // 如果歌手不存在,创建新歌手 - Singer newSinger = new Singer(); - newSinger.setName(singerName); - Singer savedSinger = singerRepository.save(newSinger); - - Set singers = new HashSet<>(); - singers.add(savedSinger); - music.setSingers(singers); + String[] singerNames = musicDTO.getSinger().split("[,,、]"); + Set singers = new HashSet<>(); + for (String singerName : singerNames) { + String trimmedName = singerName.trim(); + if (StringUtils.hasText(trimmedName)) { + Optional existingSinger = singerRepository.findByName(trimmedName); + if (existingSinger.isPresent()) { + singers.add(existingSinger.get()); + } else { + Singer newSinger = new Singer(); + newSinger.setName(trimmedName); + singers.add(singerRepository.save(newSinger)); + } + } } + music.setSingers(singers); } // 保存音乐 diff --git a/sql/music_db.sql b/sql/music_db.sql index 9dc3d25..325f873 100644 --- a/sql/music_db.sql +++ b/sql/music_db.sql @@ -202,17 +202,6 @@ CREATE TABLE `singer` ( INDEX `idx_type_id`(`type_id` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '歌手表' ROW_FORMAT = Dynamic; --- ---------------------------- --- Table structure for singer_music --- ---------------------------- -DROP TABLE IF EXISTS `singer_music`; -CREATE TABLE `singer_music` ( - `singer_id` bigint NOT NULL, - `music_id` bigint NOT NULL, - PRIMARY KEY (`singer_id`, `music_id`) USING BTREE, - INDEX `FKk0fdv208e2ulhcxd9gge63h6j`(`music_id` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; - -- ---------------------------- -- Table structure for singer_type -- ----------------------------