【发布时间】:2019-11-18 03:58:13
【问题描述】:
我正在尝试在房间数据库中存储一些改造响应。改造响应有嵌套对象,所以我试图将它放在房间 db 内的单独表中,但我遇到了一些外键问题。
我的响应中的“Exif”实体没有 ID 可用作 Photo 实体中的外键,因此我手动放置了此属性。
当我尝试在房间数据库中插入照片时,它会因以下错误而崩溃: android.database.sqlite.SQLiteConstraintException: FOREIGN KEY 约束失败 (Sqlite code 787), (OS error - 0:Success)
@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))
}
}
}
}
我的目标是为改造复杂响应和房间数据库创建一个类。
有没有办法在 Photo 类中使用 exif 属性来“指向”Exif 表中的记录?
谢谢大家
【问题讨论】:
标签: android kotlin retrofit android-room