Как мы можем запросить все сущности с их отношениями "один ко многим" с Room?
Допустим, у нас есть объект-пользователь:
@Entity
class User(@PrimaryKey(autoGenerate = true) var id: Long?, var name: String)
и Домашнее животное:
@Entity(foreignKeys = [(ForeignKey(entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"],
onDelete = ForeignKey.CASCADE))])
public class Pet(@PrimaryKey(autoGenerate = true),
var name: String,
var userId: Long?,
@Ignore var user: User?)
Обычно мы опрашиваем всех питомцев следующим образом:
@Dao
interface PetsDao {
@Query("SELECT * FROM pets")
fun getAll(): Flowable<List<Pet>>
}
Но как сделать так, чтобы Пользователь автоматически прикреплялся к объекту Домашнее животное? Как бы запрос был:
@Dao
interface PetsDao {
@Query("SELECT * FROM pets p JOIN users u ON u.id = p.userId")
fun getAllWithUser(): Flowable<List<Pet>>
}
И тогда мы могли бы использовать pet.user.name без необходимости отдельно запрашивать пользователя.