Стол Android Room с уникальным ограничением замены - PullRequest
0 голосов
/ 30 мая 2018

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

Существующий сценарий SQL выглядит следующим образом:

CREATE TABLE member_rooms (
   _id INTEGER PRIMARY KEY AUTOINCREMENT,
   new_messages INTEGER DEFAULT 0,
   member_id_fk TEXT,
   FOREIGN KEY ( member_id_fk ) REFERENCES members ( member_id ) ON DELETE CASCADE,
   UNIQUE ( member_id ) ON CONFLICT REPLACE )

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

@Entity(tableName = "member_rooms",
        indices = {@Index(value = {"member_id_fk"}, unique = true)},
        foreignKeys = {@ForeignKey(entity = MemberTableModel.class,
              parentColumns = "member_id",
              childColumns = "member_id_fk",
              onDelete = CASCADE)})
public class MemberRoomTableModel {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    @ColumnInfo(name = "_id")
    private int rowId;

    @ColumnInfo(name = "new_messages")
    private int numNewMessages;

    @ColumnInfo(name = "member_id_fk")
    private String memberId;

   .... constructors getters etc ... }

Я верю, что это правильное представление этой таблицы, но ограничение ON CONFLICT REPLACE - это то, что сбивает меня с толку.Поскольку Room использует SupportSqlOpenHelper / Database, новые API-интерфейсы обертки включают в себя стратегию конфликта во время запроса.Заменяет ли это ограничение на таблицу?Должны ли мои DAO теперь обрабатывать конфликт по каждому из запросов?Или есть поле для аннотации, которое заменяет в сущности, которую я пропускаю?

1 Ответ

0 голосов
/ 30 мая 2018

Аннотируйте все ваши методы DAO с помощью OnConflictStrategy, объект не предоставляет такой возможности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...