Я хочу вставить значения из таблицы program_day_exercise в таблицу training_exercise.Итак, я написал этот запрос:
@Query("""
INSERT INTO training_exercise
SELECT 0, :trainingId, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
FROM program_day_exercise
WHERE program_day_id = :programDayId
""")
fun fillTrainingWithProgramExercises(trainingId: Long, programDayId: Long)
Он компилируется, но есть ошибка во время выполнения об уникальном ограничении:
02-23 13:31:12.618 11881-12003/com.dmitrysimakov.kilogram E/SQLiteLog: (1555) abort at 34 in [INSERT INTO training_exercise
SELECT 0, ?, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
FROM program_day_exercise
WHERE program_day_id
02-23 13:31:12.618 11881-12003/com.dmitrysimakov.kilogram E/AndroidRuntime:
FATAL EXCEPTION: pool-4-thread-1
Process: com.dmitrysimakov.kilogram, PID: 11881
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: training_exercise._id
Затем я написал этот запрос другим способом:
@Query("""
INSERT INTO training_exercise (training_id, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance)
SELECT :trainingId, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
FROM program_day_exercise
WHERE program_day_id = :programDayId
""")
fun fillTrainingWithProgramExercises(trainingId: Long, programDayId: Long)
Работает нормально.Но плагин SQLite не может разрешать параметры в скобках.
Я добавил @Suppress ("AndroidUnresolvedRoomSqlReference") перед методом, но мне интересно, почемуплагин считает это ошибкой.
Мои сущности
@Entity(tableName = "training_exercise",
foreignKeys = [
ForeignKey(
entity = Training::class,
parentColumns = ["_id"],
childColumns = ["training_id"],
onDelete = ForeignKey.CASCADE),
ForeignKey(
entity = Exercise::class,
parentColumns = ["_id"],
childColumns = ["exercise_id"],
onDelete = ForeignKey.CASCADE)
])
data class TrainingExercise(
@PrimaryKey(autoGenerate = true) override val _id: Long = 0,
val training_id: Long,
val exercise_id: Long,
val num: Byte,
@Embedded(prefix = "measure_") val measures: ExerciseMeasures = ExerciseMeasures()
)
@Entity(tableName = "program_day_exercise",
foreignKeys = [
ForeignKey(
entity = ProgramDay::class,
parentColumns = ["_id"],
childColumns = ["program_day_id"],
onDelete = ForeignKey.CASCADE),
ForeignKey(
entity = Exercise::class,
parentColumns = ["_id"],
childColumns = ["exercise_id"],
onDelete = ForeignKey.CASCADE)
])
data class ProgramDayExercise(
@PrimaryKey(autoGenerate = true) override val _id: Long = 0,
val program_day_id: Long,
val exercise_id: Long,
val num: Byte,
val strategy: String? = null,
@Embedded(prefix = "measure_") val measures: ExerciseMeasures = ExerciseMeasures()
)