用于在数据库中插入和检索关系数据的会议室标准/最佳方法/模式

时间:2018-07-08 17:11:38

标签: android database structure android-room relation

有一个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 不允许实体中的关系,所以我我避免使用UserPetsPivotUserItemsPivot实体和DAO。

如果我说的正确,现在,由于API在userIdPet实体中均未提供Item,因此我必须手动设置

??哪个班级是这样做的? ¿它会出现在UserDao的插入功能上吗?

现在,我想获取User及其宠物和从db中填充的物品,但是我无法告诉 Room 通过返回User实体来做到这一点,相反,我有返回UserWithPetsAndItems

?我应该从现在开始在整个应用程序中保留UserWithPetsAndItems而不是实体,还是应该使用UserWithPetsAndItems填充User实体中的宠物和物品列表?

?在最后一种情况下,谁将是这样做的人,有没有像一般的“中介人”那样做?

0 个答案:

没有答案