假设我有obj
class Human{
List<Car> demagedCars = new ArrayList();
List<Car> newCars = new ArrayList();
}
@Entity(tableName = "carstable")
class Car{
@PrimaryKey(autogenerate = true)
public long id;
public String name;
}
因此,房间将创建一个名称为carstable
的表,我将从两个列表newCars
和demagedCars
中保存对象到该表
如何将其恢复为两个列表?
我认为可以创建两个表demagedcarstable
和newcarstable
然后根据列表demagedCars
至demagedcarstable
和newCars
至newcarstable
保存
但是据我所知,没有空间为表创建空间了吗?
我不想改变我的对象...
我所需要做的就是在一个数据库中创建2个表。当我得到demagedCars
的清单时,我只需要告诉他I want you to save to demagedcarstable
,而当我得到newCars
的清单时,我便告诉他I want you to save to newcarstable
。因此,我有1个数据库和2个表,并且要由我决定保存此Car
对象的位置。问题是:可能吗?
随时提问
答案 0 :(得分:1)
从结构的角度来看,我相信您应该将它们全部存储在同一张表中,例如 carsTable ,并将状态字段添加到car对象。然后,您可以查询 carsTable 并使用该状态字段在WHERE子句中过滤结果。
编辑:
从RoomDB的角度来看,您的查询如下所示:
@Query("SELECT * FROM carsTable WHERE status = :status")
public Car[] findCarsByStatus(String status);
答案 1 :(得分:0)
对于同一对象,您可以拥有尽可能多的空间数据库
@Database(entities = Car.class, version = 1, exportSchema = false)
public abstract class newCarsDatabase extends RoomDatabase {
private static final String LOG_TAG = newCarsDatabase.class.getSimpleName();
private static final Object LOCK = new Object();
private static newCarsDatabase sInstance;
public static newCarsDatabase getInstance(Context context) {
if (sInstance == null) {
synchronized (LOCK) {
Log.e(LOG_TAG, "creating new database");
String databaseName = "new_cars";
sInstance = Room.databaseBuilder(context.getApplicationContext(), newCarsDatabase.class, databaseName).build();
}
}
Log.e(LOG_TAG, "Getting the database instance");
return sInstance;
}
public abstract CarsDao favDao();
}
对于受损的人
@Database(entities = Car.class, version = 1, exportSchema = false)
public abstract class demagedCarsDatabase extends RoomDatabase {
private static final String LOG_TAG = demagedCarsDatabase.class.getSimpleName();
private static final Object LOCK = new Object();
private static demagedCarsDatabase sInstance;
public static demagedCarsDatabase getInstance(Context context) {
if (sInstance == null) {
synchronized (LOCK) {
Log.e(LOG_TAG, "creating new database");
String databaseName = "damaged_cars";
sInstance = Room.databaseBuilder(context.getApplicationContext(), demagedCarsDatabase.class, databaseName).build();
}
}
Log.e(LOG_TAG, "Getting the database instance");
return sInstance;
}
public abstract CarsDao DamagedDao();
}
此外,您可以简单地将数据添加到每个数据中,即可对两个数据使用相同的Dao,或者如果您希望为每个数据创建Dao,但由于您只有一个班级,我建议您制作一个道为他们俩