首页 > 解决方案 > 如何在房间数据库中保存外键

问题描述

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

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

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

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 中,这对我来说非常复杂,因为它由类中的对象组成。

标签: androidmvvmandroid-room

解决方案


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

1 EarthquakeData - Many Features
and
1 Feature - 1 Properties

所以你可以这样建模:

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

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

使用 Roomentities的功能如下所示:

@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官方文档


推荐阅读