Можно ли сохранить один и тот же объект в двух разных таблицах Room?

Допустим, у меня есть объект

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;
}

Итак, room создаст одну таблицу с именем 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. Вопрос: возможно ли это?

Не стесняться спрашивать

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
80
2

Ответы 2

Со структурной точки зрения я считаю, что вы должны хранить все это в одной таблице, скажем, автомобилиСтол и добавить поле статуса к объекту автомобиля. Затем вы можете запросить свой автомобилиСтол и отфильтровать результаты по предложению WHERE, используя это поле статуса.

Обновлено:

С точки зрения RoomDB ваш запрос будет выглядеть примерно так:

@Query("SELECT * FROM carsTable WHERE status = :status")
public Car[] findCarsByStatus(String status);

Не уверен, что есть хороший образец ... Все, что мне нужно, это создать в одной базе данных 2 таблицы. И когда я получаю список demagedCars, все, что мне нужно, это сказать ему I want you to save to demagedcarstable, а когда я получаю список newCars, я говорю ему I want you to save to newcarstable. В результате у меня есть 1 база данных и 2 таблицы, и мне решать, где я хочу сохранить этот объект Car. Вопрос: возможно ли это?

Aleksey Timoshchenko 01.08.2018 09:09

у вас может быть столько комнатных баз данных для одного и того же объекта, сколько вы хотите

@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();
}

Кроме того, вы можете просто добавить данные к каждому из них, вы можете использовать одно и то же Дао для них обоих, или, если хотите, вы можете сделать Дао для каждого из них, но поскольку у вас есть только один класс, я рекомендую вам сделать один Дао для обоих. их

Не уверен, что есть хороший образец ... Все, что мне нужно, это создать в одной базе данных 2 таблицы. И когда я получаю список demagedCars, все, что мне нужно, это сказать ему I want you to save to demagedcarstable, а когда я получаю список newCars, я говорю ему I want you to save to newcarstable. В результате у меня есть 1 база данных и 2 таблицы, и мне решать, где я хочу сохранить этот объект Car. Вопрос: возможно ли это?

Aleksey Timoshchenko 01.08.2018 09:09

Другие вопросы по теме