Получить поле из таблицы, задав поле из другой таблицы (Библиотека номеров) - PullRequest
0 голосов
/ 03 января 2019

Я учусь пользоваться Room в Android.У меня есть две таблицы: KeyWordsTable (id, ключевое слово) и CategoriesTable (id, imagePath).Я хочу сделать что-то вроде этого: пользователь дает ключевое слово -> проверка, к какой категории он принадлежит -> получить imagePath из CategoriesTable.

У меня есть интерфейс @Dao, и я сделал что-то вроде

@Query("SElECT image_path AS imagePath FROM CategoriesTable JOIN KeywordsTable ON idKeyWords = idCategories WHERE category_name = :categoryName LIMIT 1")

CategoriesTable findImagePathByKeyWordName(String categoryName);

Это правильное решение?Получу ли я imagePath, указав ключевое слово?

Спасибо за совет:)

CategoriesTable.class

@Entity
public class CategoriesTable {
@NonNull
@PrimaryKey(autoGenerate = true)
private int idCategories;

@ColumnInfo(name = "category_name")
private String categoryName;

@ColumnInfo(name = "image_path")
private String imagePath;
//getters and setters

KeywordsTable.класс

@Entity
public class KeywordsTable {
@PrimaryKey(autoGenerate = true)
private int idKeyWords;

@ColumnInfo(name = "keywords_name")
private String keywordsName;
//getters and setters

1 Ответ

0 голосов
/ 04 января 2019

Сначала вы должны указать внешний ключ на стороне many отношения.Кроме того, вы должны задать имя каждой таблицы в их @Entity аннотации.

KeywordsTable.java

@Entity(tableName = "keywords",
        foreignKeys = @ForeignKey(entity = CategoriesTable.class,
                                  parentColumns = "idCategories",
                                  childColumns = "categoryId",
                                  onDelete = CASCADE))
public class KeywordsTable {
    @PrimaryKey(autoGenerate = true)
    private int idKeyWords;

    @ColumnInfo(name = "keywords_name")
    private String keywordsName;

    private int categoryId;

    //getters and setters
}

CategoriesTable.java

@Entity(tableName = "categories")
public class CategoriesTable {
    @PrimaryKey(autoGenerate = true)
    private int idCategories;

    @ColumnInfo(name = "category_name")
    private String categoryName;

    @ColumnInfo(name = "image_path")
    private String imagePath;
    //getters and setters
}

Метод в интерфейсе дао должен выглядеть следующим образом:

@Query("SELECT image_path FROM categories INNER JOIN keywords" +
       "ON idCategories = categoryId WHERE keywords_name = :keyword LIMIT 1")
String findImagePathByKeyWordName(String keyword);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...