Код: Выделить всё
BenefitКод: Выделить всё
FavoriteBenefit
Каждый раз, когда преимущество удаляется на сервере, я также хочу удалить соответствующий объект из FavoriteBenefit. Для этого я могу использовать onDelete = ForeignKey.CASCADE, и всякий раз, когда родительский Benefit больше не существует в базе данных, FavoriteBenefit также удаляется. Звучит хорошо.
Проблема возникает всякий раз, когда я использую
Код: Выделить всё
@Insert(onConflict = OnConflictStrategy.REPLACE)(Аналогичная проблема возникает с таблицами Coupon и UsedCoupon.)
Я ищу способ временно отключить ограничения внешнего ключа до конца транзакции. То есть не проверяйте внешние ключи во время транзакции, а только в конце транзакции.
Я по-прежнему хочу, чтобы Room автоматически удалял объекты, у которых нет допустимого родительского элемента.
Похоже, что пометка внешнего ключа как отложенного путем установки deferred = true в определении @ForeignKey должна делать именно то, чего я пытаюсь достичь.
boolean deferred ()
Ограничение внешнего ключа может быть отложено до завершения транзакции. Это полезно, если вы выполняете массовую вставку в базу данных за одну транзакцию. По умолчанию ограничения внешнего ключа являются немедленными, но вы можете изменить их, установив для этого поля значение true.
Но даже когда я устанавливаю флаг отложенного, похоже, это не имеет никакого эффекта, поскольку FavoriteBenefit все равно удаляется каждый раз.
Я неправильно понимаю флаг отложенного?
Подробнее здесь: https://stackoverflow.com/questions/560 ... oreign-key
Мобильная версия