Невозможно установить значение счетчика для столбца - PullRequest
2 голосов
/ 13 марта 2019

Я пытаюсь получить категорию компонентов с определенным количеством компонентов в стойке.

Запрос

@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);

ComponentCat

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()?

Я пытался:

  • Наличие COUNT (component.id) в качестве component_amount, но такое не дает правильного результата
  • Повторное создание таблицы вMySQL и выполнить тот же запрос, который дал правильный результат
  • Удаление @NonNull в полях, без разницы
  • назначение component_amount.amount

    @ Query("SELECT id, name, component_amount.amount =" + "(SELECT COUNT (component.id) как сумма" ...

    это не строит

1 Ответ

2 голосов
/ 13 марта 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...