【问题标题】:Insert into multiple tables using Room Persistence Library使用 Room Persistence Library 插入多个表
【发布时间】:2018-03-28 17:41:11
【问题描述】:

这是我第一次使用 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 对象中转移详细信息。

users 表中插入用户详细信息后,有什么方法可以在 shifts 表中插入 Shift 详细信息?我最初认为这将使用 @Embeded 来处理,但这会在 user 表中创建我不想要的 shift 表列。

有人可以帮助我了解我应该如何在 Room Persistence Library 中处理这个问题。我也必须为删除做类似的事情。

谢谢

【问题讨论】:

  • 您是否将 User 和 Shift Data 放在一起作为响应?
  • @BurhanuddinRashid 是的
  • 请为您得到的响应和插入的 Dao 类发布代码

标签: android android-sqlite android-room


【解决方案1】:

在用户表中插入用户详细信息后,有什么方法可以在班次表中插入班次详细信息?

创建您自己的 DAO @Transaction 方法,该方法调用 UserShift 的插入。

删除时我也必须这样做。

如果您修复了 Shift 类,使其与 User 具有 @ForeignKey 关系并使用适当的级联删除选项,则删除 User 也会删除其 Shift 行。在您当前的实现中,UserShift 是不相关的。

【讨论】:

  • 谢谢,是的,我们更新了具有外键的 Shift 类。它使事情变得更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
相关资源
最近更新 更多