Skip to content Skip to sidebar Skip to footer

Search Query Using Android Room Relation

In Android room relation, is it possible to use search query using the property of the related table. Below is my table structure. In this i am relating transaction with payment an

Solution 1:

Ideal way is to query multiple related tables is to create a View. A view combines data from two or more tables using join.

In Android, using Room Persistance library, you can create such a view, and then you can query the fields of view. This is how you can do it:

Suppose, you have tables:

User: id, name, departmentId

Department: id, name

Create a View:

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

Add View to Database:

@Database(entities = arrayOf(User::class),
          views = arrayOf(UserDetail::class), version = 1)abstractclassAppDatabase : RoomDatabase() {
    abstractfunuserDetailDao(): UserDetailDao
}

Create a DAO:

@DaointerfaceUserDetailDao{
    @Query("SELECT * FROM UserDetail")funloadAllUserDetails(): Array<UserDetail>
}

Now, you can query a View using this DAO.

Solution 2:

Absolutely possible, you can use @Query in your DAO class please read Room Database Documentation

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

Solution 3:

use @DB or @Query.

That should perfectly work...

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

Post a Comment for "Search Query Using Android Room Relation"