Android и Room: вставка объектов «один к одному»Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android и Room: вставка объектов «один к одному»

Сообщение Anonymous »


Я в принципе пробую что-то очень простое, но не могу разобраться как следует:

У меня есть две сущности:

CategoryEntity:

@Entity( tableName = "Категории", иностранные ключи = [ Внешний ключ( сущность = JobEntity::класс, родительские столбцы = ["jobId"], childColumns = ["categoryId"] ) ], индексы = [Индекс("ИмяКатегории", уникальный = true)] ) класс данных CategoryEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "categoryId") val CategoryId: Long = 0, @ColumnInfo(name = "categoryName") val name: String, @ColumnInfo(name = "categorySlug") val slug: String, ) И JobEntity:

@Entity( tableName = "вакансии", индексы = [Index("jobId", unique = true), Index("categoryId", unique = false)] ) класс данных JobEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "jobId") val jobId: Long = 0, @Embedded val категория: CategoryEntity, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "url") val url: String, @ColumnInfo(name = "description") val описание: строка, @ColumnInfo(name = "company_logo") val CompanyLogoUrl: String?, @ColumnInfo(name = "company_name") val CompanyName: String, @ColumnInfo(name = "job_type") val jobType: String?, @ColumnInfo(name = «publication_date») val публикацииDate: String, @ColumnInfo(name = "candidate_required_location") val перемещение: String, @ColumnInfo(name = «зарплата») val зарплата: String? ) Работа может иметь ОДНУ и ТОЛЬКО ОДНУ категорию, поэтому это связь «один к одному».

Я получаю данные с удаленного сервера, и первое, что я хочу сделать, это создать CategoryEntity из поля JSON categoryName, которое я получаю в ответ сети.

Данные, которые я получаю в ответе сети:

@Serializable класс данных Job( URL-адрес значения: Строка, val заголовок: Строка, описание значения: Строка, @SerialName("имя_компании") val CompanyНазвание: Строка, @SerialName("имя_категории") val CategoryName: Строка, val теги: Строка? = ноль, расположение значения: Строка, @SerialName("pub_date") val pubDate: String ) Чтобы сделать это, я выполняю следующие шаги:

// СНАЧАЛА я создаю `CategoryEntity` с `categoryName` val CategoryEntity = CategoryEntity( имя = jobFromNetworkResponse.categoryName, slug = jobFromNetworkResponse.categoryName ) // ВТОРАЯ I Вставка категории в БД val CategoryId = категорияLocalDataSource.insertCategory(categoryEntity) // ТРЕТЬЯ. Я конвертирую объект данных сетевого ответа в свой объект сущности. val jobEntity = jobFromNetworkResponse.toEntity(categoryEntity) // ЧЕТВЕРТОЕ Я вставляю объект сущности в БД localDataSource.insertJob(jobEntity) Однако, следуя такой процедуре, я всегда получаю следующее в своем объекте CategoriesDao, прежде чем вообще вставлять какое-либо задание:

android.database.sqlite.SQLiteConstraintException: ограничение FOREIGN KEY не выполнено (код 787 SQLITE_CONSTRAINT_FOREIGNKEY[787]) @Дао Интерфейс КатегорииДао { @Insert(onConflict = ЗАМЕНИТЬ) приостановить развлечение InsertCategory (категория: CategoryEntity): Long ... Что я делаю не так? Это потому, что я неправильно определил отношения? Или, может быть, это потому, что я явно устанавливаю для jobId и categoryId значение 0 и имею autoIncrement = true?
Изменить
Я попробовал это, но все равно получаю то же сообщение:
@Entity( tableName = "вакансии", иностранные ключи = [ Внешний ключ( сущность = КатегорияEntity::класс, родительские столбцы = ["categoryId"], childColumns = ["categoryId"] ) ], индексы = [Index("jobId", unique = true), Index("categoryId", unique = true)] ) класс данных JobEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "jobId") val jobId: Long = 0, @ColumnInfo(name = "categoryId") val CategoryId: Long, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "url") val url: String, @ColumnInfo(name = "description") val описание: строка, @ColumnInfo(name = "company_logo") val CompanyLogoUrl: String?, @ColumnInfo(name = "company_name") val CompanyName: String, @ColumnInfo(name = "job_type") val jobType: Нить?, @ColumnInfo(name = «publication_date») val публикацииDate: String, @ColumnInfo(name = "candidate_required_location") val перемещение: String, @ColumnInfo(name = «зарплата») val зарплата: String? )
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»