В документации для Android * указано, что PRAGMA recursive_triggers включен по умолчанию:
По умолчанию все базы данных RoomDatabase используют в памяти для таблиц TEMP и включают рекурсивные триггеры.
Это вызывает у меня проблемы, когда я использую вставку с «onConflict (REPLACE)»: если (и только если) recursice_triggers разрешено, это вызывает мой триггер onDelete (см. Документация SQLite ):
REPLACE [...] Когда стратегия разрешения конфликтов REPLACE удаляет строки для удовлетворения ограничения, триггеры delete запускаются тогда и только тогда, когда включены рекурсивные триггеры. [...]
Я пытался отключить это, добавив db.execSQL("PRAGMA recursive_triggers = 0;");
в RoomDatabase.Callback.onCreate (), но это не имело никакого эффекта.
public static synchronized FnsDatabase getInstance(Context context){
if (instance == null) {
instance = Room.databaseBuilder(context, MyDb.class, "mydb.db")
.addCallback(triggerCallback)
.build();
}
return instance;
}
private static RoomDatabase.Callback triggerCallback = new RoomDatabase.Callback(){
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
// adding some triggers here
db.execSQL("PRAGMA recursive_triggers = 0;");
}
};
Может кто-нибудь помочь мне сэто?