假设,我们从后台返回一个数据类型是这样的:

  1. public class News{
  2. public long id;
  3. public String title;
  4. public String title;
  5. public List<Tag>tags;
  6. }
  7. public class Tag{
  8. public long id;
  9. public String name;
  10. }

bean 的改造
@Entity(tableName = "news")
       public class News{
      @PrimaryKey(autoGenerate = true)
        public long id;
        public String title;
        public String title;
       @Ignore
        public List<Tag>tags;
      } 
       @Entity(tableName = "tags")
       public class Tag{
             @PrimaryKey(autoGenerate = true)
              public long id;
              public String name;
               @ColumnInfo(name = "news_id")
            public long newsid;
        }

然后我们需要重新添加一个bean:NewsWithTags:

public class NewsWithTags{
@Embedded
public News news;
  @Relation(parentColumn = "id",entityColumn = "news_id")
   public List<Tag> tags;
}

注意看这个bean,没有table注解@Embedded 注解的是news这个bean。
@Relation 中parentColumn对应的是news中的id,entityColumn对应的是tag中的news_id,这个值实际上就等于news中的id。

Dao
@Dao
public interface NewsWithTaDao {
@Transaction
@Query("SELECT * FROM news")
List<NewsWithTag> getAllNews();

添加数据要先添加news,然后根据news 的id添加tag,删除数据,要先根据news的id删除tag表中的数据

官方文档 https://developer.android.google.cn/training/data-storage/room/defining-data
参考实例 https://github.com/BuleB/RoomOrmDemo