【发布时间】:2021-03-08 14:53:35
【问题描述】:
我有一个包含两个实体的房间数据库,并且是多对多关系 但出现查询错误
我在使用 android room 时遇到错误
错误:查询返回的列在 com.example.sporttracker.room.relations.WorkoutWithExercises 中没有字段 [nameOfWorkout,dateOfWorkout,caloriesBurntInWorkout,workoutId],即使它们被注释为非空或原始。查询返回的列:[amountExercise,caloriesBurntProExercise,exerciseName,exerciseId]
公共抽象 androidx.lifecycle.LiveData
我的实体:
@Entity(tableName = "exercise_table")
data class Exercise(
@NonNull
@ColumnInfo(name = "amountExercise")
var amountExercise: String,
@NonNull
@ColumnInfo(name = "caloriesBurntProExercise")
var caloriesBurntProExercise: String,
@NonNull
@ColumnInfo(name = "exerciseName")
var exerciseName: String,
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "exerciseId")
var exerciseId: Long = 0L
@Entity(tableName = "workout_table")
data class Workout(
@NonNull
@ColumnInfo(name = "nameOfWorkout")
var nameOfWorkout: String,
@NonNull
@ColumnInfo(name = "dateOfWorkout")
var dateOfWorkout: String,
@NonNull
@ColumnInfo(name = "caloriesBurntInWorkout")
var caloriesBurntInWorkout: String,
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "workoutId")
var workoutId: Long = 0L
我的道:
@Query("""
SELECT *
FROM exercise_table
WHERE exerciseId = :id
""")
fun fetchWorkoutWithExercises(id: Long): LiveData<List<WorkoutWithExercises>>
我的关系:
data class WorkoutWithExercises(
@Embedded val workout: Workout,
@Relation(
parentColumn = "workoutId",
entityColumn = "exerciseId",
associateBy = Junction(ExerciseWorkoutCrossRef::class)
)
val exercises: List<Exercise>
)
// region: entity
@Entity(
primaryKeys = ["exerciseId", "workoutId"],
foreignKeys = [
ForeignKey(
entity = Exercise::class,
parentColumns = ["exerciseId"],
childColumns = ["exerciseId"]
),
ForeignKey(
entity = Workout::class,
parentColumns = ["workoutId"],
childColumns = ["workoutId"]
)
]
)
//endregion
// region: data class
data class ExerciseWorkoutCrossRef(
@ColumnInfo(name = "exerciseId")
val exerciseId: Long,
@ColumnInfo(name = "workoutId", index = true)
val workoutId: Long
)
//endregion
【问题讨论】:
标签: android android-room