#android #kotlin #android-room #android-jetpack
#Android #kotlin #android-room #android-реактивный ранец
Вопрос:
в настоящее время я изучаю, как использовать Room в Android. и все учебные пособия, которым я следую, создают только одну таблицу (т.Е. Только Один класс данных)
вот база данных и dao, если я хочу сохранить только одну таблицу (т.Е. Note
Объект здесь)
вот класс данных базы данных
@Database(entities = [Note::class], version = 1)
@TypeConverters(DataConverter::class)
abstract class NoteDatabase : RoomDatabase() {
abstract val noteDao: NoteDao
companion object {
@Volatile
private var INSTANCE: NoteDatabase? = null
fun getInstance(context: Context): NoteDatabase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
NoteDatabase::class.java,
"note_database"
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
}
и вот Dao
@Dao
interface NoteDao {
@Insert
fun save(note: Note)
@Delete
fun delete(note: Note)
@Query("DELETE FROM note")
fun deleteAllNotes()
@Query("SELECT * FROM note ORDER BY priority DESC")
fun getAllNotes() : LiveData<List<Note>>
}
что делать, если я хочу сохранить более одной таблицы, если, например, я хочу сохранить объект Note и Product в две таблицы. мой вопрос
нужно ли мне создавать 2 разные базы данных абстрактных классов, такие как NoteDatabase
and ProductDatabase
, а также два Dao, такие как NoteDao
and ProductDao
?
если я могу это объединить, не могли бы вы показать мне код?
Комментарии:
1. Вам понадобится по одному объекту на таблицу, и
entities
свойство вашейDatabase
аннотации должно будет перечислить их все. Есть ли у вас по одному DAO на объект или вы объединяете их, зависит от вас — комнате все равно. Любой пример, имеющий отношения, покажет несколько объектов, таких как этот . Вам не нужно несколькоRoomDatabase
классов.
Ответ №1:
Вы можете взглянуть на пример приложения sunflower от Google.
@Database(entities = [GardenPlanting::class, Plant::class], version = 1, exportSchema = false)
Вам нужно будет включить свой класс entity в свойство списка «entities» в @Database. Как в приведенном выше примере GardenPlanting и Plant.
Ответ №2:
Создайте класс данных с аннотацией @Entity для каждой таблицы. Например, ниже приведены две таблицы: tableOne и tableTwo
@Entity(tableName = "table_one")
data class TableOne(
@PrimaryKey
@ColumnInfo(name = "id")
val id: Int,
@ColumnInfo(name = "title")
val title: String
)
@Entity(tableName = "table_two")
data class TableTwo(
@PrimaryKey
@ColumnInfo(name = "id")
val id: Int,
@ColumnInfo(name = "name")
val name: String
)
Теперь перечислите эти таблицы как объекты в @Database
@Database(entities = [TableOne::class, TableTwo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun appDao(): AppDao
}