Android Room - 处理对象中的对象列表并查询结果

时间:2017-12-11 12:50:45

标签: java android mysql android-room

我正在使用Android的房间数据库,并且在理解如何:

时遇到了一些大问题
  1. 当我向数据库添加Person时,它会添加所有变量,例如List<Shoe>List<Pet>等也是数据库。
  2. 创建关系,以便在检索Person时,检索其所有字段,例如Pet, Shoe, Shirt等。(不确定是什么类型的查询)

  3. 执行简单查询,例如Retrieve Person where shoe.name = "boot";

  4. 我知道您必须使用外键关系与对象列表,否则使用单个对象可以使用@Embed@TypeConverter

    示例代码如下所示;

    @Entity(tableName = "person")
        public class Person {
            @PrimaryKey
            @NonNull
            private String personId;
            private List<Pet> pets;
            private List<Shoe> shoes;
            private List<Shirt> shirts;
        }
    
    @Entity(foreignKeys = {
            @ForeignKey(
                    entity = Person.class,
                    parentColumns = "personId",
                    childColumns = "personIdFk"
            )
        })
        public class Pet {
            String petId;
            String name;
            String personIdFk; //Foreign key to person
        }
    
    @Entity(foreignKeys = {
                @ForeignKey(
                        entity = Person.class,
                        parentColumns = "personId",
                        childColumns = "personIdFk"
                )
        })
        public class Shoe {
            String shoeId;
            String name;
            String personIdFk; //Foreign key to person
        }
    
    
    @Entity(foreignKeys = {
            @ForeignKey(
                    entity = Person.class,
                    parentColumns = "personId",
                    childColumns = "personIdFk"
            )
        })
        public class Shirt {
                String shirtId;
                String name;
                String personIdFk; //Foreign key to person
            }
    

1 个答案:

答案 0 :(得分:4)

由于某些potential issues with lazy loading,会议室不直接支持此功能,但有一些DAO技巧可能。您需要明确处理插入,并且一旦您需要POJO来包装所有内容,就可以查询所有内容。

myGrid.DataBindings.Clear(); // not working

为简洁起见,省略了构造函数,getter和setter。