Java Android Room持久性库:实现多对多关系的最佳方式是什么?

Java Android Room持久性库:实现多对多关系的最佳方式是什么?,java,android,orm,android-sqlite,android-room,Java,Android,Orm,Android Sqlite,Android Room,我以前使用Realm,现在正在测试室中,以便比较这两种工具 我正在尝试实现以下多对多关系: 这里是我的实体类: 人: @Entity(tableName = "person") public final class RoomPerson { @PrimaryKey public int id; public String name; } Cat类: @Entity(tableName = "cat") public final class RoomCat { @Pri

我以前使用Realm,现在正在测试室中,以便比较这两种工具

我正在尝试实现以下多对多关系:

这里是我的
实体
类:

@Entity(tableName = "person")
public final class RoomPerson {

  @PrimaryKey
  public int id;

  public String name;

}
Cat
类:

@Entity(tableName = "cat")
public final class RoomCat {

  @PrimaryKey
  public int id;

  public int age;

  public String name;

}
@Entity(tableName = "person_cat", primaryKeys = { "personId", "catId" },
    indices = { @Index(value = { "catId" }) },
    foreignKeys = { @ForeignKey(entity = RoomPerson.class, parentColumns = "id", childColumns = "personId"),
        @ForeignKey(entity = RoomCat.class, parentColumns = "id", childColumns = "catId") })
public final class RoomPersonCat {

  public int personId;

  public int catId;

  public RoomPersonCat(int personId, int catId)  {
    this.personId = personId;
    this.catId = catId;
  }

}
PersonCat
类:

@Entity(tableName = "cat")
public final class RoomCat {

  @PrimaryKey
  public int id;

  public int age;

  public String name;

}
@Entity(tableName = "person_cat", primaryKeys = { "personId", "catId" },
    indices = { @Index(value = { "catId" }) },
    foreignKeys = { @ForeignKey(entity = RoomPerson.class, parentColumns = "id", childColumns = "personId"),
        @ForeignKey(entity = RoomCat.class, parentColumns = "id", childColumns = "catId") })
public final class RoomPersonCat {

  public int personId;

  public int catId;

  public RoomPersonCat(int personId, int catId)  {
    this.personId = personId;
    this.catId = catId;
  }

}
我还有一个POJO,可以操纵一个有猫的人进入我的应用程序:

public final class RoomPersonWithAnimals {

  @Embedded
  public RoomPerson person;

  @Relation(parentColumn = "id", entityColumn = "id", entity = RoomCat.class)
  public List<RoomCat> cats;

}
在领域中,可以只在一个请求中保存这些数据。是空间有限还是我的实现错误


提前感谢您的帮助

自Room 2.2以来,ORM支持表之间所有可能的关系


请参阅关于媒体的专门文章:

由于缺少POJO关系,房间很麻烦。我建议不要去追求它,或者等待它们包含类似领域的设施。到目前为止,领域有其自身的局限性。为什么在安卓发布10年后,就没有人能想出一个完整的解决方案,这真的让我很困扰。类似CoreData的东西。Realm的问题是它要求我们实现一个RealmObject。Room的问题是它无法理解对象内部的关系。这可能会有所帮助