Как использовать onDelete = RESTRICT в комнате?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как использовать onDelete = RESTRICT в комнате?

Сообщение Anonymous »

Чтобы предотвратить удаление родительской строки, которая имеет одну или несколько связанных дочерних строк в моей базе данных Room, я установил для метода ForeignKey onDelete значение RESTRICT.
В моей базе данных есть две таблицы: продукты и document_products, которые имеют ForeignKey для продуктов, во время использования приложения пользователь может удалить все элементы из таблицы продуктов, но мне все равно нужно сохранять элементы в document_products, но RESTRICT, кажется, не работает, как даже с ним я получаю:

Ограничение FOREIGN KEY не выполнено (код 1811 SQLITE_CONSTRAINT_TRIGGER)

Мой объект DocumentProduct выглядит следующим образом:

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

@JsonClass(generateAdapter = true)
@Entity(
tableName = "document_products",
foreignKeys = [
ForeignKey(
entity = Document::class,
parentColumns = ["id"],
childColumns = ["documentId"],
onDelete = CASCADE
),
ForeignKey(
entity = Product::class,
parentColumns = ["products_id"],
childColumns = ["document_products_productIdMap"],
onDelete = RESTRICT
)
],
indices = [Index("document_products_productIdMap"), Index("documentId"), Index(
value = ["document_products_productIdMap", "documentId", "labelType"],
unique = true
)]
)

data class DocumentProduct(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "document_products_id")
var id: Long,
@ColumnInfo(name = "document_products_productIdMap")
var productId: String,
@ColumnInfo(name = "document_products_quantity")
var quantity: Float,
var orderQuantity: Float,
@ColumnInfo(name = "document_products_purchase")
var purchase: Float,
var documentId: Long,
var labelType: String?,
var timestamp: Long?
)
Пока продукт:

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

@Entity(tableName = "products")
open class Product(
@PrimaryKey(autoGenerate = false)
@ColumnInfo(name = "products_id")
open var id: String,
open var description: String?,
@ColumnInfo(defaultValue = "PZ")
open var unitOfMeasure: String,
@ColumnInfo(name = "products_purchase")
open var purchase: Float,
open var price: Float,
@ColumnInfo(name = "products_quantity")
open var quantity: Float
)
А в настройках приложения пользователь имеет возможность запустить следующий запрос от ProductDAO:

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

@Query("DELETE FROM products")
suspend fun deleteAll(): Int
Я ищу решение, в котором я могу сохранить родительские строки, имеющие одну или несколько связанных дочерних строк, ИЛИ где я могу сохранить ForeignKey без реальной связи.

Подробнее здесь: https://stackoverflow.com/questions/750 ... ct-in-room
Ответить

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

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

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

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

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