java - 如何在 Android Room 中编写一对一(两个嵌入式实体的多个 pojo)
问题描述
如何编写一对多关系,其中许多是其他两个嵌入式实体的 pojo?一个 A 可能有多个 B,但每个 DataList 一个 A 可能只有一个 B。
这是我的代码的简化。
@Entity(tableName = "as")
public class A{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "a_id")
private int mId;
@ColumnInfo(name = "a_type")
private String mType;
//getters and setters
}
@Entity(tableName = "bs")
public class B{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "b_id")
private int mId;
@ColumnInfo(name = "b_type")
private String mType;
@ColumnInfo(name = "list_id")
private int mListId;
//getters and setters
}
@Entity(tableName = "data_lists")
public class DataList{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "data_list_id")
private int mId;
//getters and setters
}
public class AandB {
@Embedded
private A mA;
@Embedded
private B mB;
//getters and setters
}
public class DataListWithAandBs{
@Embedded
private DataList mDataList;
@Relation(
parentColumn = "data_list_id",
entityColumn = "list_id")
private List<AandB> mAandBList;
//getters and setters
}
@Dao
public interface DataListWithAandBsDao {
@Query("SELECT * FROM data_lists LEFT JOIN (SELECT * FROM as LEFT JOIN bs ON a_type = b_type) ON list_id = data_list_id")
LiveData<List<DataListWithAandBs>> getDataListsWithAsandBs();
}
编译时收到错误消息:该类必须是@Entity 或@DatabaseView。我不希望该列表成为一个实体,尽管我希望它是一个 Pojos 列表。这可能与房间有关吗?
解决方案
我相信您需要在关系上设置实体,如下所示:
public class DataListWithAandBs{
@Embedded
private DataList mDataList;
@Relation(
parentColumn = "data_list_id",
entityColumn = "list_id",
entity = A.java
)
private List<AandB> mAandBList;
//getters and setters
}
因为您想从另一个表中获取关系,但希望返回类型不是表的实体。
我在这个项目中做了类似的事情:https ://github.com/emmaguy/room-playground/blob/master/app/src/main/java/com/monzo/room_playground/Database.kt#L33
推荐阅读
- android - 数据保护模式 - React Native
- azure - OneLogin Azure AD 作为目录
- c# - 为 ASP.NET Web API 执行插入和更新查询时的 Sqlite 异常
- php - 我制作的 PHP Curl 发布代码不起作用
- java - 当应用程序从 Play 商店强制更新时,如何保持 android 应用程序始终处于登录状态?
- wordpress - 如何在子类别中显示帖子
- google-apps-script - 如何仅通过选择单个单元格来复制单行的范围?
- javascript - 使用 localStorage 时,存储值在页面刷新时丢失
- javascript - 当依赖项不同时,如何将从我本地的 github 克隆的 react 应用程序导入现有的 react 项目
- javascript - 在使用 PHP 发送之前,如何要求检查复选框?