Android Room получить поле с другого стола - PullRequest
0 голосов
/ 12 января 2019

В моем приложении у меня есть две таблицы: Операции и Категории.

Операционный стол

@Entity(tableName = "OperationsTable")
public class Operation
{
    @PrimaryKey (autoGenerate = true)
    private int OperationNumber;
    private int Year;
    private int Month;
    private int Day;
    private String Category;
    private float Amount;
}

Таблица категорий

public class Category implements Serializable
{
    @PrimaryKey(autoGenerate = true)
    private int id;

    @ColumnInfo(name = "CategoryName")
    private String name;

    @ColumnInfo(name = "CategoryType")
    private String type;

    @ColumnInfo(name = "IconID")
    private int iconID;
}

До сих пор я делал запрос, который возвращал подмножество операций:

@Query("SELECT Category as CategoryName, SUM(Amount) as OperationQuantity FROM OperationsTable WHERE Year = :year AND KindOfOperation = 'Gasto' AND Month = :month GROUP BY Category ORDER BY SUM(Amount) DESC")
LiveData<List<OperationSubset>> getCategorizedExpensesInMonth(Integer year, Integer month);

Подмножество это:

public class OperationSubset
{
    @ColumnInfo(name = "CategoryName")
    public String name;

    @ColumnInfo(name = "OperationQuantity")
    public float quantity;
}

Теперь я хотел бы вернуть то же подмножество, но добавив поле из таблицы категорий:

public class OperationSubsetDesired
{
    @ColumnInfo(name = "CategoryName")
    public String name;

    @ColumnInfo(name = "OperationQuantity")
    public float quantity;

    public float iconID <-- from Categories table
}

Я знаю, что должен использовать отношения, но я борюсь с этим.

1 Ответ

0 голосов
/ 18 января 2019
 @Query("SELECT Category as CategoryName, SUM(Amount) as OperationQuantity, Categories.IconID" +
            " FROM OperationsTable LEFT JOIN Categories ON OperationsTable.Category = Categories.CategoryName" +
            " WHERE Year = :year AND KindOfOperation = 'Gasto' AND Month = :month GROUP BY Category ORDER BY SUM(Amount) DESC")

Так и должно быть. Если вы будете использовать аннотацию отношений, структура вашего объекта будет другой. Подробнее об объединениях вы можете посмотреть здесь https://www.w3schools.com/sql/sql_join.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...