Какой тип должен иметь класс использующий Room

«Какой тип должен иметь класс использующий Room» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Класс, использующий Room, должен быть помечен аннотацией @Entity для таблиц базы данных или @Dao для интерфейсов доступа к данным. Также могут использоваться @Database для абстрактных классов, наследующих RoomDatabase.

Пример для сущности:

@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "user_name") val name: String
)

Пример для DAO:

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): List<User>
}

Для работы Room требуется, чтобы классы были открытыми (не private/internal). Сущности должны иметь хотя бы одно поле с @PrimaryKey.