Создание второй таблицы БД и привязка ее к первой, Room
Изучаю работу с Room и в целом базами данных в андроид. Есть приложение - которое генерирует два вида объектов. Первый содержит в себе информацию о автомобиле. Второй - информацию о работах, которые проводятся по конкретному автомобилю. Я так понимаю, надо что бы второй объект был привязан к БД первого объекта. Работ по машине много, а машина одна например.
По первому объекту я создал базу данных, все поля отображаются корректно в базе. Теперь мне нужно то же сделать и со вторым обектом, в котором описаны работы по машине.
Создал для второго объекта аналогичные классы @Database и @Dao, в классе объекта отметил поля и @Foreingkey. В итоге, прилетает ошибка.
WorkData:
@Entity(foreignKeys = [ForeignKey(entity = CarData::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("workName"),
onDelete = CASCADE)])
class WorkData(@ColumnInfo val workName: String,
@ColumnInfo val workDescription: String,
@ColumnInfo val time: String,
@ColumnInfo val progress: String,
@ColumnInfo val coast: String,
@ColumnInfo val color: String,
@ColumnInfo val positionInCarList: Int) : Parcelable {
@PrimaryKey(autoGenerate = true) var id: Long = 0
WorkDatabase:
@Database(entities = [WorkData::class], version = 1)
abstract class WorkDatabase : RoomDatabase() {
abstract fun getWorkDatabaseDAO(): WorksDatabaseDAO
companion object {
fun init(context: Context) = Room.databaseBuilder(context, WorkDatabase::class.java, "workDatabase").allowMainThreadQueries().build()
}
}
WorkDatabaseDAO:
@Dao
interface WorksDatabaseDAO {
@Query("SELECT * FROM WorkData")
fun getCarsList(): List<WorkData>
@Delete
fun delete(carData: WorkData)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addCarToDatabase(entity: WorkData)
}
Текст ошибки: (ошибка build output)
e: C:\Users\Solo4\AndroidStudioProjects\Homework1\homework5\build\tmp\kapt3\stubs\debug\com\example\homework5\database\WorkDatabase.java:7: error: CarData table referenced in the foreign keys of com.example.homework5.data.WorkData does not exist in the database. Maybe you forgot to add the referenced entity in the entities list of the @Database annotation?
public abstract class WorkDatabase extends androidx.room.RoomDatabase {
^
Скорее всего, я что что то не так сделал при создании базы данных WorkData, но не могу рабобраться, что не так..
Ответы (1 шт):
Проблема решил отредактировав класс CarData.
@Database(entities = [**CarData::class, WorkData::class**], version = 1)