【问题标题】:How to Save Foreign Keys in Room Database如何在房间数据库中保存外键
【发布时间】:2021-04-28 06:37:57
【问题描述】:

我有以下要存储在房间数据库中的模型类:

我知道的不多,但我认为我需要在这里使用外键。虽然我没有太多的想法,这只是一个猜测。

如果你能给出详细的解释,

public class EarthquakeData {

  public List < Feature > features;

  public class Feature {
    public String type;
    public Properties properties;
    //        public Geometry geometry;
    public String id;

    public class Properties {
      public double mag;
      public String place;
      public Object time;
      public Object updated;
      public Object tz;
      public String url;
      public String detail;
      public int felt;
      public double cdi;
      public double mmi;
      public String alert;
      public String status;
      public int tsunami;
      public int sig;
      public String net;
      public String code;
      public String ids;
      public String sources;
      public String types;
      public int nst;
      public double dmin;
      public double rms;
      public double gap;
      public String magType;
      public String type;
      public String title;
    }

  }


}

我在 Room 数据库中只保存了一个简单的类,如以下类:

@Entity(tableName = "notes")
public class Note {

  @PrimaryKey
  @NonNull
  private String id;

  @NonNull
  @ColumnInfo(name = "note")
  private String mNote;

  public Note(@NonNull String id, @NonNull String mNote) {
    this.id = id;
    this.mNote = mNote;
  }

  @NonNull
  public String getId() {
    return id;
  }

  @NonNull
  public String getNote() {
    return this.mNote;
  }
}

但我不知道在 Room 中保存第一种类型的模型类,这对我来说非常复杂,因为它由类中的对象组成。

【问题讨论】:

    标签: android mvvm android-room


    【解决方案1】:

    据我了解,您有以下关系:

    1 EarthquakeData - Many Features
    and
    1 Feature - 1 Properties
    

    所以你可以这样建模:

    Table Features(id: PrimaryKey, earthquake_data_id: ForeignKey, ...)

    Table Feature(id: PrimaryKey, properties_id: ForeignKey, ...)

    对于 Room entities,其功能如下所示:

    @Entity(
        tableName = "features",
        foreignKeys = [
            ForeignKey(
                entity = EarthquakeDataEntity::class,
                parentColumns = ["id"],
                childColumns = ["earthquake_data_id"],
                onDelete = ForeignKey.CASCADE, // See documentation for other operations
                onUpdate = ForeignKey.CASCADE
            )
        ]
    class Features {
        ...
    }
    

    查看ForeignKey官方文档了解参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 2021-10-22
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多