Но проблема в том, что я не получаю ограничение FOREIGN KEY (код 787 SQLITE_CONSTRAINT_FOREIGNKEY). Насколько я исследовал это, эта ошибка возникает, когда есть неправильное имя (в именах столбцов для родительского или дочернего элемента) или отсутствуют имена столбцов в соответствующей родительской или дочерней таблице, но в моем случае ничего подобного нет;
Код: Выделить всё
TablesКод: Выделить всё
@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,
)
Код: Выделить всё
@Dao- Для вставки данных:-
Код: Выделить всё
@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