【问题标题】:Android Room FOREIGN KEY constraint failed (code 787) when insert new row插入新行时,Android Room FOREIGN KEY 约束失败(代码 787)
【发布时间】:2018-09-19 15:29:54
【问题描述】:

我关注了这个帖子Android Room FOREIGN KEY constraint failed (code 787)。不幸的是,它不适用于我的情况。

尝试插入新注释时,我总是收到错误消息。当然,数据库中存在一个主题。

你们有什么想法吗?

请看我下面的代码。

主题:

@Entity(tableName = "topic")
data class Topic(@PrimaryKey var id: Long? = null,
            @ColumnInfo(name = "name") var name: String,
            @ColumnInfo(name = "note_count") var noteCount: Int = 0,
            @ColumnInfo(name = "view_count") var viewCount: Long = 0) : Serializable {
    @Ignore
    var notes: List<Note>? = null
}

注意:

@Entity(tableName = "note",
        foreignKeys = arrayOf(ForeignKey(entity = Topic::class,
        parentColumns = arrayOf("id"), childColumns = arrayOf("topic_id"), onDelete = ForeignKey.CASCADE)))
@TypeConverters(TimestampConverter::class)
data class Note(@PrimaryKey(autoGenerate = true) var noteId: Long? = null,
           @ColumnInfo(name = "topic_id") var topicId: Long? = null,
           @ColumnInfo(name = "title") var title: String,
           @ColumnInfo(name = "caption") var caption: String? = "",
           @ColumnInfo(name = "created_at") var createdAt: Date? = null) : Serializable {

}

NoteDao:

@Dao
interface NoteDao {
    @Query("SELECT * from note")
    fun getAll(): LiveData<List<Note>>

    @Insert(onConflict = REPLACE)
    fun insert(note: Note)

    @Query("DELETE from note")
    fun deleteAll()

    @Delete
    fun delete(category: Note)

    @Query("SELECT * FROM note WHERE title = :title COLLATE NOCASE LIMIT 1")
    fun findNoteByTitle(title: String): Note?

    @Query("SELECT * FROM note WHERE topic_id = :topicId")
    fun findNotesByTopicId(topicId: Long): LiveData<List<Note>>

    @Query("SELECT count(*) FROM note WHERE topic_id = :topicId")
    fun countNotesByTopicId(topicId: Long): Long

    @Update(onConflict = IGNORE)
    fun update(category: Note)
}

【问题讨论】:

标签: android sqlite orm android-room android-orm


【解决方案1】:

我发现了问题。因为我已经创建了 2 个不同的数据库:TopicDataBase 和 NoteDataBase。

所以我只需要删除其中的 1 个。 我的坏>"

【讨论】:

    【解决方案2】:

    (@PrimaryKey var id: Long? = null, 看起来有问题。主键不能为空

    【讨论】:

    • 对您有帮助吗?
    • 我确实成功插入了一个主题。这不是问题。我还将代码更改为'@PrimaryKey(autoGenerate = true) var id: Long = 0'。它仍然无法正常工作:(
    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2019-10-26
    相关资源
    最近更新 更多