Android Room-查询中外键的使用
我有一个Android Room-查询中外键的使用,android,sql,database,android-sqlite,android-room,Android,Sql,Database,Android Sqlite,Android Room,我有一个组件,其中包含一个来自组件\u类别的外键 我的目的是根据所选组件类别筛选组件列表 这两个类别如下: @Query("SELECT * from component_table " + "INNER JOIN component_cat_table " + "WHERE component_table.component_cat_id == :categoryID ORDER BY component_name ASC") LiveData
组件
,其中包含一个来自组件\u类别的外键
我的目的是根据所选组件类别筛选组件列表
这两个类别如下:
@Query("SELECT * from component_table " +
"INNER JOIN component_cat_table " +
"WHERE component_table.component_cat_id == :categoryID ORDER BY component_name ASC")
LiveData<List<Component>> getFilteredComponents(int categoryID);
组成部分
组件类别
查询 我希望我的查询如下所示:
@Query("SELECT * from component_table " +
"INNER JOIN component_cat_table " +
"WHERE component_table.component_cat_id == :categoryID ORDER BY component_name ASC")
LiveData<List<Component>> getFilteredComponents(int categoryID);
@Query(“从组件表中选择*”+
“内部联接组件\u目录”+
“其中组件\u table.component\u cat\u id==:类别id按组件\u名称ASC排序”)
LiveData getFilteredComponents(int categoryID);
但在编译时,它告诉我它无法解析
组件表.component\u cat\u id
。我也无法在我的组件
类中的外键实体上设置名称。我尝试了一些选项,但我不知道如何在不“访问”外键的情况下修复查询。我碰巧在一个名为“android持久性”的示例项目中找到了答案
为了使用外键,还必须定义指定外键的列。列与外键数组之间的“链接”将自动建立
@Entity(foreignKeys = {
@ForeignKey(entity = Book.class,
parentColumns = "id",
childColumns = "book_id"),
@ForeignKey(entity = User.class,
parentColumns = "id",
childColumns = "user_id")})
@TypeConverters(DateConverter.class)
public class Loan {
@PrimaryKey
@NonNull
public String id;
public Date startTime;
public Date endTime;
@ColumnInfo(name="book_id")
public String bookId;
@ColumnInfo(name="user_id")
public String userId;
}
以上示例来自以下链接
@Entity(foreignKeys = {
@ForeignKey(entity = Book.class,
parentColumns = "id",
childColumns = "book_id"),
@ForeignKey(entity = User.class,
parentColumns = "id",
childColumns = "user_id")})
@TypeConverters(DateConverter.class)
public class Loan {
@PrimaryKey
@NonNull
public String id;
public Date startTime;
public Date endTime;
@ColumnInfo(name="book_id")
public String bookId;
@ColumnInfo(name="user_id")
public String userId;
}