Комната для Android ДАО получает одно поле с перекрестной ссылкой

#android #kotlin #android-room

Вопрос:

У меня есть две противоположности

 @Entity
data class Student(
    @PrimaryKey(autoGenerate = false)
    val studentId: Int,
    val studentName: String
)
 

и

 @Entity
data class Subject(
    @PrimaryKey(autoGenerate = false)
    val subjectId: Int,
    val subjectName: String
)
 

и перекрестная ссылка для них

 @Entity(primaryKeys = ["studentId", "subjectId"])
data class StudentSubjectCrossRef(
    val studentId: Int,
    val subjectId: Int
)
 

Я хочу получить список названий предметов, которые изучает студент с определенным именем.
Я могу получить объект со списком предметов, связанных с ним.

Но как написать DAO, чтобы получить список строк только с именами субъектов?

Ответ №1:

Вы можете попробовать следующий код:

 @Dao
interface YourDao {
    @Query("SELECT su.subjectName FROM Subject su INNER JOIN StudentSubjectCrossRef ss ON ss.subjectId = su.subjectId INNER JOIN Student st ON ss.studentId = st.studentId WHERE st.studentName = :studentName")
    suspend fun getSubjectNamesByStudentName(studentName: String): List<String>
}
 

Комментарии:

1. Спасибо! Но это сложный SQL, я думал, что есть простой способ использовать функции комнаты

2. Нет проблем! Все запросы в комнате должны быть написаны от руки, для них нет ярлыков.