В Room Persistence Library используются различные аннотации для определения структуры базы данных и поведения сущностей. Разберем ключевые аннотации:
@Entity
data class User(
@PrimaryKey val id: Long,
val name: String
)
autoGenerate = true
для автоинкремента@PrimaryKey(autoGenerate = false)
@Entity
data class User(
@PrimaryKey val id: Long,
val name: String,
@Ignore val temporaryToken: String
)
@Ignore constructor()
data class Address(
val street: String,
val city: String
)
@Entity
data class User(
@PrimaryKey val id: Long,
val name: String,
@Embedded val address: Address
)
@Embedded(prefix = "home_")
class DateConverter {
@TypeConverter
fun fromTimestamp(value: Long?): Date? = value?.let { Date(it) }
@TypeConverter
fun dateToTimestamp(date: Date?): Long? = date?.time
}
@Entity
@TypeConverters(DateConverter::class)
data class Event(
@PrimaryKey val id: Long,
val name: String,
val date: Date // Кастомный тип
)
@Entity
@TypeConverters(DateConverter::class)
data class User(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val name: String,
@Embedded val address: Address,
@Ignore val sessionToken: String,
val registrationDate: Date
)
Room предоставляет мощные аннотации для гибкого управления структурой базы данных. @PrimaryKey определяет уникальный идентификатор, @Ignore исключает поля из хранения, @Embedded позволяет вкладывать объекты, а @TypeConverters дает возможность работать с кастомными типами данных.