我目前正在与Room进行比较,以便与Realm进行比较,我已经有很多关于最佳做事方式的问题。
在我的示例应用中,我有一个非常简单的模型,其中一个Person
可以有Cat
和Dog
s。
这里是java类。
Cat
和Dog
类继承自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
; 提前感谢您的帮助!
答案 0 :(得分:1)
如何保存RoomPersonWithAnimals对象列表?
至少在Room的1.0.0-alpha6
版本中,你不会,因为那些不是实体。
对于我的RoomPersonWithAnimals列表中的每个对象,我应该播放3个请求吗?
是。您可以使用runInTransaction()
在单个SQLite事务中执行这三个操作。