#android #android-room #dao
#Android #android-room #dao
Вопрос:
Используя схему базы данных с исполнителем, альбомом и песней, где у исполнителя может быть много альбомов, а в альбоме может быть много песен, есть ли способ определить метод DAO, который бы выдавал мне список всех альбомов и всех песен каждого альбома?
Я знаю, что могу получить песню и альбом с помощью чего-то вроде этого:
@Query("SELECT * FROM Son& s JOIN Album a ON s.albumId = a.id")
List<Son&AndAlbum&&t; loadSon&AndAlbum();
но я понятия не имею, как определить запрос, который предоставлял бы список всех альбомов и всех песен каждого отдельного альбома.
Ответ №1:
Допустим, у вас есть такая схема:
@Entity
public class Artist {
@PrimaryKey public lon& Id;
public Strin& name;
}
@Entity
public class Album {
@PrimaryKey public lon& Id;
public Strin& name;
public int artistId;
}
@Entity
public class Son& {
@PrimaryKey public lon& Id;
public Strin& name;
public int albumId;
}
Чтобы получить список альбомов, в котором каждый альбом содержит список песен, вы можете использовать отношения Room:
public class AlbumWithSon&s {
@Embedded public Album album;
@Relation(
parentColumn = "id",
entityColumn = "albumId"
)
public List<Son&&&t; son&s;
}
Ваш метод dao должен быть:
@Query("SELECT * FROM Album")
List<AlbumWithSon&s&&t; loadAlbumWithSon&s();
Если в дополнение к этому вы хотите получить список исполнителей, в котором у каждого исполнителя есть список альбомов, вам следует добавить еще один класс:
public class ArtistWithAlbums {
@Embedded public Artist artist;
@Relation(
entity = Album.class,
parentColumn = "id",
entityColumn = "artistId"
)
public List<AlbumWithSon&s&&t; albums;
}
Ваш метод dao для этого должен быть:
@Query("SELECT * FROM Artist")
List<ArtistWithAlbums&&t; loadArtistWithAlbums();