有一个API可向用户返回宠物和物品,即JSON:
[
{
"id":65462169
"name":"Hermokrates Aries",
"pets":[
{
"id":12314989
"name": "Leah"
}
],
"items":[
{
"id":66546894
"description": "Triumph Horn"
}
]
}
]
类看起来像这样(为简洁起见,避免使用封装和外键):
@Entity
public class Pet {
@PrimaryKey
public long id;
public String name;
public long userId;
}
@Entity
public class Item {
@PrimaryKey
public long id;
public String description;
public long userId;
}
@Entity
public class User {
@PrimaryKey
public long id;
public String name;
@Ignore
public List<Pet> pets;
@Ignore
public List<Item> items;
}
public class UserWithPetsAndItems {
@Embedded
public User user;
@Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class)
public List<Pet> pets;
@Relation(parentColumn = "id", entityColumn = "userId", entity = Item.class)
public List<Item> items;
}
public abstract class UserDao extends BaseDao<User> {
@Query("SELECT * FROM User")
public List<UserWithPetsAndItems> getAllUsersWithPetsAndItems();
}
现在,我想知道如何在此示例中从数据库中插入和检索数据(没有匕首,rx,viewModel或存储库以保持简单):
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Fetch the users from the API using retrofit.
List<User> users = authService.getUsers();
// Now we have to insert the users, pets and items in the DB
// We need to set pets' and items' userId so we can relate them
insert...
// Now we retrieve the users from the DB
List<UserWithPetsAndItems> usersWithPetsAndItems = Db.getInstance().userDao().getAllUsersWithPetsAndItems();
}
}
因此,如果我错了,请纠正我,但是使用这种方法,我正在创建UserWithPetsAndItems
来处理该关系,因为 Room 不允许实体中的关系,所以我我避免使用UserPetsPivot
和UserItemsPivot
实体和DAO。
如果我说的正确,现在,由于API在userId
和Pet
实体中均未提供Item
,因此我必须手动设置
??哪个班级是这样做的? ¿它会出现在UserDao的插入功能上吗?
现在,我想获取User
及其宠物和从db中填充的物品,但是我无法告诉 Room 通过返回User
实体来做到这一点,相反,我有返回UserWithPetsAndItems
。
?我应该从现在开始在整个应用程序中保留UserWithPetsAndItems
而不是实体,还是应该使用UserWithPetsAndItems
填充User
实体中的宠物和物品列表?
?在最后一种情况下,谁将是这样做的人,有没有像一般的“中介人”那样做?