Android Room с отложенным внешним ключомAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Room с отложенным внешним ключом

Сообщение Anonymous »

У меня есть несколько таблиц, которые периодически обновляются с сервера (, Branch, Coupon) и еще две таблицы, которые являются только локальными (

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

FavoriteBenefit
, UsedCoupon). Диаграмма ER выглядит следующим образом:
Изображение


Каждый раз, когда преимущество удаляется на сервере, я также хочу удалить соответствующий объект из FavoriteBenefit. Для этого я могу использовать onDelete = ForeignKey.CASCADE, и всякий раз, когда родительский Benefit больше не существует в базе данных, FavoriteBenefit также удаляется. Звучит хорошо.

Проблема возникает всякий раз, когда я использую

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

@Insert(onConflict = OnConflictStrategy.REPLACE)
для обновления льгот в базе данных. REPLACE фактически выполняет операции DELETE и INSERT, но DELETE внутренне запускает onDelete из FavoriteBenefit, и в результате все данные в этой таблице также удаляются.

(Аналогичная проблема возникает с таблицами Coupon и UsedCoupon.)



Я ищу способ временно отключить ограничения внешнего ключа до конца транзакции. То есть не проверяйте внешние ключи во время транзакции, а только в конце транзакции.
Я по-прежнему хочу, чтобы Room автоматически удалял объекты, у которых нет допустимого родительского элемента.



Похоже, что пометка внешнего ключа как отложенного путем установки deferred = true в определении @ForeignKey должна делать именно то, чего я пытаюсь достичь.


boolean deferred ()

Ограничение внешнего ключа может быть отложено до завершения транзакции. Это полезно, если вы выполняете массовую вставку в базу данных за одну транзакцию. По умолчанию ограничения внешнего ключа являются немедленными, но вы можете изменить их, установив для этого поля значение true.


Но даже когда я устанавливаю флаг отложенного, похоже, это не имеет никакого эффекта, поскольку FavoriteBenefit все равно удаляется каждый раз.

Я неправильно понимаю флаг отложенного?

Подробнее здесь: https://stackoverflow.com/questions/560 ... oreign-key
Ответить

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

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

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

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

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