Как обработать ограничение FOREIGN KEY (код 787 SQLITE_CONSTRAINT_FOREIGNKEY) в базе данных комнаты - androidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обработать ограничение FOREIGN KEY (код 787 SQLITE_CONSTRAINT_FOREIGNKEY) в базе данных комнаты - android

Сообщение Anonymous »

Я имею дело с БД комнаты, которая имеет несколько сущностей, которые связаны с родительской таблицей с помощью внешних ключей с соответствующими именами столбцов соответственно. Основная цель, для которой я использовал здесь внешние ключи, — связать соответствующие данные в родительской таблице с дочерними таблицами.
Но проблема в том, что я не получаю ограничение FOREIGN KEY (код 787 SQLITE_CONSTRAINT_FOREIGNKEY). Насколько я исследовал это, эта ошибка возникает, когда есть неправильное имя (в именах столбцов для родительского или дочернего элемента) или отсутствуют имена столбцов в соответствующей родительской или дочерней таблице, но в моем случае ничего подобного нет;
[/b]:

Код: Выделить всё

@Entity(
tableName = "information_data",
foreignKeys = [
ForeignKey(
entity = CollectionData::class,
parentColumns = ["collection_name"],
childColumns = ["key_of_linked_collection"],
onDelete = ForeignKey.CASCADE,
onUpdate = ForeignKey.CASCADE
),
ForeignKey(
entity = ImportantInformationData::class,
parentColumns = ["heading"],
childColumns = ["key_of_imp_linked_collection"],
onDelete = ForeignKey.CASCADE,
onUpdate = ForeignKey.CASCADE
),
ForeignKey(
entity = ArchivedInformationData::class,
parentColumns = ["heading"],
childColumns = ["key_of_archived_linked_collection"],
onDelete = ForeignKey.CASCADE,
onUpdate = ForeignKey.CASCADE
),
]
)
data class InformationData(
@PrimaryKey val heading: String,
val location: String,
val base_url: String,
val image_url: String,

val is_linked_with_collections: Boolean,
val key_of_linked_collection: String,

val is_linked_with_imp_collections: Boolean,
val key_of_imp_linked_collection: String,

val is_linked_with_archived_collections: Boolean,
val key_of_archived_linked_collection: String,
)

@Entity(tableName = "collection_data")
data class CollectionData(
@PrimaryKey val collection_name: String,
val info_for_saving: String,
)

@Entity(tableName = "archived_information_data")
data class ArchivedInformationData(
@PrimaryKey val heading: String,
val location: String,
val base_url: String,
val image_url: String,
val info_for_saving: String,
)

@Entity(tableName = "important_information_data")
data class ImportantInformationData(
@PrimaryKey var heading: String,
var location: String,
var base_url: String,
var image_url: String,
var info_for_saving: String,
)
  • Для вставки данных:-

Код: Выделить всё

 @Insert
suspend fun addANewInfo(infoData: InformationData)
  • если я хочу получить какие-либо данные, я просто использую запросы:

Код: Выделить всё

@Query("SELECT * FROM information_data WHERE is_linked_with_imp_collections=1 AND key_of_imp_linked_collection=:key")
fun getThisFolderData(key: String): Flow[*]>
  • Когда я пытаюсь вставить в них данные с соответствующими данными, выдается такая ошибка:

Код: Выделить всё

android.database.sqlite.SQLiteConstraintException:  FOREIGN KEY constraint failed (code 787 SQLITE_CONSTRAINT_FOREIGNKEY)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:967)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:790)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:89)
at androidx.sqlite.db.framework.FrameworkSQLiteStatement.executeInsert(FrameworkSQLiteStatement.kt:42)
at androidx.room.EntityInsertionAdapter.insert(EntityInsertionAdapter.kt:52)
at com.sample.example.localDB.LocalDBDao_Impl$14.call(LocalDBDao_Impl.java:282)
at com.sample.example.localDB.LocalDBDao_Impl$14.call(LocalDBDao_Impl.java:277)
at androidx.room.CoroutinesRoom$Companion$execute$2.invokeSuspend(CoroutinesRoom.kt:65)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at androidx.room.TransactionExecutor.execute$lambda$1$lambda$0(TransactionExecutor.kt:36)
at androidx.room.TransactionExecutor.$r8$lambda$AympDHYBb78s7_N_9gRsXF0sHiw(Unknown Source:0)
at androidx.room.TransactionExecutor$$ExternalSyntheticLambda0.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
  • Я уже видел ответы на соответствующие вопросы, но они не отвечают в моем конкретном случае; Как я могу это исправить? Спасибо :))


Подробнее здесь: https://stackoverflow.com/questions/765 ... t-foreignk
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»