Нет необходимости использовать dao и обращаться к таблице соединений для таких простых реализаций. Если вы определите свои модели таким образом, вы сможете получить доступ к песням в списке воспроизведения с помощью простого метода getSongs (), определенного в модели списка воспроизведения.
Модель песни:
@Entity
@Data
public class Song {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Integer id;
@Column (name = "title")
private String title;
// some other properties...
@ManyToMany (mappedBy = "songs")
private List<Playlist> playlists = new ArrayList<>();
}
Модель списка воспроизведения:
@Entity
@Data
public class Playlist {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
private String name;
// some other properties...
@ManyToMany (cascade = CascadeType.ALL)
@JoinTable (
name = "Playlist_Song",
joinColumns = { @JoinColumn (name = "playlist_id") },
inverseJoinColumns = { @JoinColumn (name = "song_id") }
)
private List<Song> songs = new ArrayList<>();
}
А чтобы получить определенный список воспроизведения, используя только Hibernate (хотя это проще сделать в репозиториях Spring, если вы их используете), вы можете получить его с помощью объекта Session.
public Playlist getPlaylistById(Integer id) {
Playlist playlist = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()){
playlist = (Playlist) session.get(Playlist.class, id);
}
return playlist;
}