我正在尝试获取机架中具有一定数量组件的组件类别。
@Query("SELECT id, name, component_amount = " +
" (SELECT COUNT(component.id) as amount " +
" FROM component " +
" WHERE component.rack_id = :rackID AND component_cat.id = component_cat_id ) " +
"FROM component_cat")
LiveData<List<ComponentCat>> getRackComponentCategories(long rackID);
public class ComponentCat
{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
public long componentCatID;
@ColumnInfo(name = "name")
private String componentCatName;
@ColumnInfo(name = "component_amount")
private int amountOfComponents;
public ComponentCat(String componentCatName, int amountOfComponents) {
this.componentCatName = componentCatName;
this.amountOfComponents = amountOfComponents;
}
在PHPMyAdmin中对其进行测试是可行的,但是将此SQL放入Room应用程序中时,出现以下错误:
error: The columns returned by the query does not have the fields [amountOfComponents] in com.mwb.digitalstorage.model.ComponentCat even though they are annotated as non-null or primitive. Columns returned by the query: [id,name,component_amount = (SELECT COUNT(component.id) as amount FROM component WHERE component.rack_id = :rackID AND component_cat.id = component_cat_id )]
在会议室中,如何将变量amountOfComponents
设置为COUNT()
的结果?
我尝试过:
分配component_amount.amount
@Query(“ SELECT id,name,component_amount.amount =” + “(选择COUNT(component.id)作为数量” ...
这不会建立
答案 0 :(得分:2)
Room不支持为列指定别名。
您的错误消息状态:
Columns returned by the query: [id,name,component_amount = (SELECT COUNT(component.id) as amount FROM component WHERE component.rack_id = :rackID AND component_cat.id = component_cat_id )
这意味着它将整个查询解释为一列。
尝试将查询更改为以下内容:
@Query("SELECT id, name, " +
" (SELECT COUNT(component.id) as amount " +
" FROM component " +
" WHERE component.rack_id = :rackID AND component_cat.id = component_cat_id ) as component_amount " +
"FROM component_cat")
LiveData<List<ComponentCat>> getRackComponentCategories(long rackID);