【发布时间】:2020-09-22 23:17:34
【问题描述】:
我有一个小问题,我对如何将对象插入不同的实体感到困惑。 我尝试了一种解决方法:
@Query("INSERT INTO card_table VALUES(:id, :pid, :question, :answer, :type, :completed)")
suspend fun insertCard(id: UUID, pid: UUID, question: String, answer: String, type: CardType, completed: Boolean)
然而,这并没有奏效。
我的问题是,如何将一个对象插入到具有单个数据库的不同实体表中。
注意 -> insert() 查询用于将牌组插入到牌组表中。该问题与 card_table 有关,因为我不确定如何引用它。
谢谢
数据库
@Insert(onConflict = OnConflictStrategy.ABORT)
suspend fun insert(deck: Deck)
@Insert
suspend fun insertCard(card: FlashCard)
@Database(entities = [Deck::class, FlashCard::class], version = 8, exportSchema = false)
@TypeConverters(DeckTypeConverters::class)
abstract class FlashCardDB : RoomDatabase() {
abstract fun DeckDAO(): DeckDAO
companion object {
private var INSTANCE: FlashCardDB? = null
fun getDatabase(context: Context, scope: CoroutineScope): FlashCardDB {
val tmpInstance = INSTANCE
if (tmpInstance != null) return tmpInstance
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
FlashCardDB::class.java,
"flash_cards_database"
).build() //.fallbackToDestructiveMigration() will causes users to loose data during migrations (use only for testing purposes)
INSTANCE = instance
return instance
}
表格
@Entity(tableName = "deck_table")
@Parcelize
data class Deck(
@PrimaryKey @ColumnInfo(name = "id") val id: UUID = UUID.randomUUID(),
@ColumnInfo(name = "title") var title: String,
@ColumnInfo(name = "date") var date: Calendar,
@ColumnInfo(name = "completed") var completed: Boolean
) : Parcelable {
@Entity(tableName = "card_table")
@Parcelize
data class FlashCard(
@PrimaryKey @ColumnInfo(name = "id") val id: UUID = UUID.randomUUID(),
@ColumnInfo(name = "parent_id") var pid: UUID,
@ColumnInfo(name = "question") var question: String,
@ColumnInfo(name = "answer") var answer: String,
@ColumnInfo(name = "type") var type: CardType,
@ColumnInfo(name = "completed") var completed: Boolean)
: Parcelable {
}
【问题讨论】:
标签: android sqlite kotlin android-sqlite android-room