在ROOM数据库中连接表

6
这是我的第一个 ROOM 实现。我有一个名为 User 的类,其中一个成员变量是 Pets 列表。
public class User {
    String id;
    String name;
    List<Pet> pets;
}


Public class Pets {
    String id;
    String type;
}

如何从以下JSON创建Room数据库的实体和DAO类?
{  
  "users":[  
    {  
      "id":"as123",
      "name":"John",
      "pets":[  
        {  
          "id":"p123",
          "type":"dog"
        }
      ]
    },
    {  
      "id":"as343",
      "name":"Mark",
      "pets":[  
        {  
          "id":"p324",
          "type":"dog"
        },
        {  
          "id":"p254",
          "type":"cat"
        }
      ]
    }
  ]
}

我已经创建了下面的内容,但不确定如何创建正确的列或连接这些表。

实体类

@Entity(tableName = "user")
public class User {

    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "id")
    String id;

    @Nullable
    @ColumnInfo(name = "name")
    String name;

    List<Pets> pets; // how to set type for Pets
}

@Entity(tableName = "pets",
    foreignKeys = @ForeignKey(entity = User.class,
    parentColumns = "id",
    childColumns = "userId",
    onDelete = CASCADE))
Public class Pets {

    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "id")
    String id;

    @Nullable
    @ColumnInfo(name = "type")
    String type;

    @NonNull
    @ColumnInfo(name = "userId")
    String userId; // for accessing pets of a user
} 

DAO类。
@Dao
public interface PetsDAO {

    @Insert
    void insert(Pets pets);

    @Update
    void update(Pets... pets);

    @Delete
    void delete(Pets... pets);

    @Query("SELECT * FROM pets WHERE id=:userId")
    List<Pets> getPetsForUser(final String userId);
}

@Dao
public interface UserDAO {

    @Insert
    void insert(User pets);

    @Update
    void update(User... pets);

    @Delete
    void delete(User... pets);

    @Query("SELECT * FROM user)
    List<User> getAllUsers(); // should return list of users with all their pets
}

如何获取包含所有宠物的用户列表?您需要使用List来实现。
1个回答

3

1
我已经检查过了,但是它很令人困惑。问题1:我需要为GSON创建单独的POJO和为ROOM创建单独的类(实体)吗?问题2:每个表都需要单独的DAO类还是一个DAO类就可以服务于多个表? - Abhinav Tyagi
Q1:您可以在同一个POJO中使用多个注释。 Q2:是的,您必须为每个表创建一个DAO。 - Amine Nokra
那么我可以在Room中使用AutoValue吗?我在某个地方看到它不受支持,因为AutoValue不生成setter。 - Abhinav Tyagi
我从未使用过AutoValue,但我刚刚看到你可以使用它创建Builder模式。 - Amine Nokra
在这里我看到了 https://dev59.com/0lcP5IYBdhLWcg3wFmre - Abhinav Tyagi
3
从技术上讲,这是一种一对多的关系。“一个”用户有“多个”宠物。 - Johann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接