1

我目前正在玩 Room 以便将其与 Realm 进行比较,并且我已经对最好的做事方式有很多疑问。

在我的示例应用程序中,我有一个非常简单的模型,其中一个 aPerson可以有Cats 和Dogs。

这里是java类。

CatDog类从一个类继承Animal

public abstract class RoomAnimal
{

  @PrimaryKey
  public int id;

  public int age;

  public String name;

}

Cat班级:

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

}

Dog班级:

@Entity(tableName = "dog")
public final class RoomDog
    extends RoomAnimal
{

  public enum RoomColor
  {
    Black, White
  }

  public static final class RoomColorConverter
  {

    @TypeConverter
    public RoomColor fromString(String color)
    {
      return color != null ? RoomColor.valueOf(color) : null;
    }

    @TypeConverter
    public String fromRealmColor(RoomColor color)
    {
      return color.toString();
    }

  }

  @TypeConverters(RoomColorConverter.class)
  public RoomColor color;

}

Person班级:

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

  @PrimaryKey
  public int id;

  public String name;

}

我还有一个 POJO 来模拟用户可以养猫和狗的事实:

public final class RoomPersonWithAnimals
{

  @Embedded
  public RoomPerson person;

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

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

}

问题是:如何保存RoomPersonWithAnimals对象列表?

我不能Insert在类中使用注释,Dao因为RoomPersonWithAnimals它不是Entity.

对于我列表中的每个对象,我RoomPersonWithAnimals应该运行 3 个请求吗?

  • 一是为了插入person属性;
  • 一个以插入列表cats
  • 一个以插入列表dogs

预先感谢您的帮助 !

4

1 回答 1

2

如何保存 RoomPersonWithAnimals 对象的列表?

你不会,至少在1.0.0-alpha6Room 的版本中,因为它们不是实体。

对于我的 RoomPersonWithAnimals 列表中的每个对象,我应该播放 3 个请求吗?

是的。您可以使用runInTransaction()在单个 SQLite 事务中执行这三个操作。

于 2017-07-26T14:21:20.710 回答