#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. Нет проблем! Все запросы в комнате должны быть написаны от руки, для них нет ярлыков.