Вставка в несколько таблиц с помощью библиотеки сохранения состояния комнаты

Я впервые использую Room. У меня есть класс под названием:

@Entity(tableName = "users")
class User{
   @PrimaryKey
   @ColumnInfo(name = "id")
   @SerializedName("id")
   String id;

   @ColumnInfo(name = "name")
   @SerializedName("name")
   String name;

   @SerializedName("shift")
   @Ignore
   List<Shift> shifts; 
}

@Entity(tableName = "shifts")
class Shift{
   @PrimaryKey
   @ColumnInfo(name = "id")
   @SerializedName("id")
   String id;

   @ColumnInfo(name = "start_time")
   @SerializedName("start_time")
   String startTime;

   @ColumnInfo(name = "end_time")
   @SerializedName("end_time")
   String endTime;
}

Я хочу, чтобы эти две таблицы были отдельными таблицами в базе данных, поэтому я не могу использовать аннотацию @Embedded, поскольку она создаст единую таблицу, используя все поля в качестве столбцов. Я использую указанный выше класс User для хранения ответов json с сервера, где я получаю информацию о пользователе и смещаю подробную информацию в объекте json.

Можно ли как-нибудь вставить сведения о смене в таблицу смен, как только я вставлю данные о пользователе в таблицу пользователи? Сначала я думал, что это будет обрабатываться с помощью @Embeded, но это создаст столбцы таблицы shift в таблице user, что мне не нужно.

Может ли кто-нибудь помочь мне в том, как я могу справиться с этим в библиотеке сохранения состояния комнаты. То же самое мне придется сделать и для удаления.

Спасибо


person nibz    schedule 17.10.2017    source источник
comment
Получаете ли вы в ответ вместе данные пользователя и смены?   -  person Burhanuddin Rashid    schedule 17.10.2017
comment
@BurhanuddinRashid да   -  person nibz    schedule 17.10.2017
comment
Пожалуйста, отправьте код для ответа, который вы получаете, и класс Dao для вставки   -  person Burhanuddin Rashid    schedule 17.10.2017


Ответы (1)


Есть ли способ вставить данные смены в таблицу смен, как только я вставлю данные пользователя в таблицу пользователей?

Создайте свой собственный метод DAO @Transaction, который вызывает вставки для User и Shift.

То же самое мне придется сделать и для удаления.

Если вы исправите свой Shift класс так, чтобы он имел отношение @ForeignKey к User с соответствующей опцией каскадного удаления, удаление User приведет к удалению и его Shift строк. В вашей текущей реализации User и Shift не связаны.

person CommonsWare    schedule 17.10.2017
comment
Спасибо, да, мы обновили класс Shift, у которого есть внешний ключ. Это упрощает жизнь. - person nibz; 19.10.2017