Товарищи,ниже будут представлены три класса.
По порядку.
Есть первый класс Item (он будет полем во втором классе) -
public class Item {
private String Id;
private String name;
private String category;
private String url;
}
Есть второй класс Items (он же в свою очередь будет вложенным в третьем классе)
public class Items {
private int id;
private String unit;
private String url;
private ServerItem item;
}
B Третий класс ItemList
public class ItemList {
private int id;
private String name;
private String listUrl;
private ServerItems[] items;
}
Room за вас это не сделает, насколько мне известно. Вам придется самому записывать вложенные данные. Плюс, если не ошибаюсь, Relation не может использоваться внутри Entity. Так что делать надо примерно так:
Item - не Entity, а сабсущность для Items. В Items помечаем ее как Embedded. Не забываем про геттери и сеттеры, если хотите оставить поля приватными.
public class Item {
private String Id;
private String name;
private String category;
private String url;
}
@Entity
public class Items {
private int id;
private String unit;
private String url;
private int list_id;
@Embedded
private ServerItem item;
}
Теперь в таблице Items в бд будут поля обоих классов, то есть room пишет их как одну структуру, а не разные. Естественно такой подход применим только если соотношение iTem <-> Items один к одному. Если это не так, то их нужно связывать ключом, то есть в Item должен находится id объекта Items или наоборот, если то один ко многим, или третьей таблицей с парами ключ-ключ, если это многие ко многим.
Теперь как записывать ItemList. Для начала в Items 100% должен быть ключ того ItemList, которому принадлежит данный Items. Если один Items может быть во многих листах то вместо поля list_id вам нужна новая таблица для связи многие ко многим.
Причем в самом ItemList списка не должно быть, т.к. Reltion не может быть в Entity. Нам нужен отдельный класс для Entity и отдельный Relation
@Entity
public class ItemList {
private int id;
private String name;
private String listUrl;
}
public class ItemListWithList {
@Embedded
private ItemList itemList;
@Relation(parentColumn = “id”, entityColumn = “list_id”)
private ServerItems[] items;
}
Теперь можно создать запрос в DAO:
@Query(“SELECT * FROM ItemList ”)
List<ItemListWithList> getUsers();
Из типа возвращаемого значения Room поймет что помимо таблицы ItemList надо еще подтянуть и Items и вернет объекты с наполненными массивами.
Это мы про чтение. Запись нам придется реализовать самостоятельно, т.к. в DAO в insert вы не Entity отправить не можете. Просто пишем свой метод:
public void insert(List<ItemListWithList> list){
for(ItemListWithList o : list){
dao.insert(o.items);
dao.insert(o.itemList);
}
}
В kotlin т.к. DOA может быть не только интерфейс, но и абстрактный класс, мне удавалось как-то создавать свои методы прям в DAO, но не знаю получится ли так сделать на Java
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
какие есть инструменты для парсинга AliExpress используя java? пробовал разными способами, но данные не приходили после парсинга
Мне просто нужно узнать сколько всего строк в html странице где будут данные подобного вида "World:5" Мне нужные эти данные только для split', чтоб...
Как сделать чтобы при нажатии на кнопку в которой код
Задан шаблон комплексного числа в виде шаблона {real, image}, например: