- 定义
Student
实体类
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class Student(
@PrimaryKey
val studentId: Int,
val name: String
)
- 定义
Course
实体类
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class Course(
@PrimaryKey
val courseId: Int,
val courseName: String
)
- 定义关联表及关联类
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
@Entity(
primaryKeys = ["studentId", "courseId"],
foreignKeys = [
ForeignKey(
entity = Student::class,
parentColumns = ["studentId"],
childColumns = ["studentId"],
onDelete = ForeignKey.CASCADE
),
ForeignKey(
entity = Course::class,
parentColumns = ["courseId"],
childColumns = ["courseId"],
onDelete = ForeignKey.CASCADE
)
]
)
data class StudentCourseCrossRef(
val studentId: Int,
val courseId: Int
)
- 定义联合类用于存储学生及其课程信息
data class StudentWithCourses(
val student: Student,
val courses: List<Course>
)
- 定义
DAO
接口
import androidx.room.Dao
import androidx.room.Join
import androidx.room.Query
@Dao
interface StudentCourseDao {
@Query("""
SELECT * FROM Student
JOIN StudentCourseCrossRef ON Student.studentId = StudentCourseCrossRef.studentId
JOIN Course ON StudentCourseCrossRef.courseId = Course.courseId
WHERE Student.studentId = :studentId
""")
fun getStudentCourses(studentId: Int): List<StudentWithCourses>
}