Я пытаюсь сохранить некоторую модификацию ответа в комнате дБ.В ответе на модификацию есть вложенный объект, поэтому я пытаюсь поместить его в отдельную таблицу внутри комнаты db, но я сталкиваюсь с некоторой проблемой с внешними ключами.
Моя сущность "Exif" из ответа не имеет идентификатораиспользовать в качестве внешнего ключа в объекте Photo, поэтому я помещаю этот атрибут вручную.
Когда я пытаюсь вставить фотографии в базу данных, происходит сбой с этой ошибкой: android.database.sqlite.SQLiteConstraintException: ограничение FOREIGN KEY не выполнено(Sqlite code 787), (Ошибка ОС - 0: Успех)
@Entity(
tableName = "photo_table", foreignKeys = [ForeignKey(
entity = Exif::class,
parentColumns = ["id"],
childColumns = ["exif"]
)]
)
class Photo {
constructor()
constructor(value: String) {
val gson = Gson()
gson.fromJson(value, Photo::class.java)
}
@PrimaryKey(autoGenerate = false)
@SerializedName("id")
@Expose
var id: String = ""
// other stuffs
@SerializedName("exif")
@Expose
@ColumnInfo(name="exif")
var exif: Exif? = null
}
@Entity(tableName = "exif_table")
class Exif {
constructor()
constructor(value: String){
val gson = Gson()
gson.fromJson(value, Exif::class.java)
}
@PrimaryKey(autoGenerate = true)
@Expose
@ColumnInfo(name="id")
var id: Int? = null
@SerializedName("model")
@Expose
var model: String? = ""
// Some code
}
class PhotoRepository (private val photoDao: PhotoDao, private val exifDao: ExifDao) {
@WorkerThread
suspend fun insert(photos: List<Photo>){
val resultIds = ArrayList<Long>()
photos.forEach { photo ->
if (photo.exif!=null){
val exifId = exifDao.addExif(photo.exif!!)
resultIds.add(photoDao.addPhoto(photo))
}
}
}
}
Моя цель состоит в том, чтобы иметь один класс для модифицированного комплексного ответа и для комнаты дБ.
Есть ли способ использовать атрибут exif в классе Photo для "указания" на запись в таблице Exif?
Спасибо всем