Поисковый запрос с использованием отношения комнат Android - PullRequest
0 голосов
/ 09 октября 2019

В отношении комнат Android можно использовать поисковый запрос, используя свойство связанной таблицы. Ниже моя структура таблицы. В этом я связываю транзакцию с платежом и строками (позиции транзакции). У меня есть поле поиска в моем пользовательском интерфейсе, где пользователь может искать, используя сумму платежа, которая находится внутри таблицы платежей. Как сформировать запрос для доступа к свойствам таблицы платежей.

class TransactionWithPaymentAndLines(
    @Embedded
    var transactions: Transactions? = null,

    @Relation(
        parentColumn = "id",
        entityColumn = "transactionId",
        entity = Payment::class
    )
    var payments: List<Payment> = listOf(),

    @Relation(
        parentColumn = "id",
        entityColumn = "transactionId",
        entity = TransactionLines::class
    )
    var transactionLines: List<TransactionLines> = listOf()
)

Ответы [ 3 ]

1 голос
/ 09 октября 2019

Идеальный способ запроса нескольких связанных таблиц - создать View . Представление объединяет данные из двух или более таблиц, используя join .

. В Android, используя библиотеку Room Persistance , вы можете создать такое представление, а затем выполнить запросполя зрения. Вот как вы можете это сделать:

Предположим, у вас есть таблицы:

Пользователь : идентификатор, имя, департамент ID

Отдел : идентификатор, имя

Создать представление:

@DatabaseView("SELECT user.id, user.name, user.departmentId," +
        "department.name AS departmentName FROM user " +
        "INNER JOIN department ON user.departmentId = department.id")
data class UserDetail(
    val id: Long,
    val name: String?,
    val departmentId: Long,
    val departmentName: String?
)

Добавить представление в базу данных:

@Database(entities = arrayOf(User::class),
          views = arrayOf(UserDetail::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDetailDao(): UserDetailDao
}

Создание DAO:

@Dao
interface UserDetailDao {
    @Query("SELECT * FROM UserDetail")
    fun loadAllUserDetails(): Array<UserDetail>
}

Теперь вы можете запросить View, используя этот DAO.

0 голосов
/ 09 октября 2019

используйте @DB или @ Query.

Это должно прекрасно работать ...

@ Query ("SELECT * FROM TABLE_NAME") List getAll ();

0 голосов
/ 09 октября 2019

Абсолютно возможно, вы можете использовать @Query в своем классе DAO, пожалуйста, прочитайте Документация по базе данных комнат

Примеры @ Query

@Query("SELECT * FROM user")
List<User> getAll();

@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);

@Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
       "last_name LIKE :last LIMIT 1")
User findByName(String first, String last);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...