Я прочитал тонну вопросов и статей о номерах и внешних ключах, и я почти уверен, что на самом деле не могу достичь того, что пытаюсь сделать. Также в большинстве примеров / учебных пособий объясняется только запрос выбора.
Итак, существует класс c отношение один ко многим, и я хотел бы определить объект с помощью @Embedded и @Relation, чтобы получить «один выстрел». msgstr "вставить метод для объекта, содержащего список объектов. Чтобы быть более понятным:
Лицензия:
@Entity(tableName = "licence")
data class Licence(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "licence_id")
var licenceId: Int,
@ColumnInfo(name = "expiration_date")
var expirationDate: Date
//other attributes )
LicenceConfigurations:
@Entity(
foreignKeys = [
ForeignKey(
entity = Licence::class,
parentColumns = ["licence_id"],
childColumns = ["licence_reference"],
onDelete = ForeignKey.CASCADE,
onUpdate = ForeignKey.CASCADE
)],
tableName = "licence_configurations")
data class LicenceConfig(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "licence_config_id")
var licenceConfigId: Int,
@ColumnInfo(name = "licence_reference")
var licenceId: Int
//other attributes )
LicenceWithConfigurations
data class LicenceWithConfigurations(
@Embedded
val licence: Licence,
@Relation(
parentColumn = "licence_id",
entityColumn = "licence_reference",
entity = LicenceConfig::class)
val licenceConfig: List<LicenceConfig>?)
Что я пытаюсь сделать чтобы избежать @Transaction и выполнить первую вставку для License, получить идентификатор, установить идентификатор для каждой конфигурации LicenceConfiguration и выполнить другую вставку. Вместо этого я хотел бы иметь метод, подобный этому, в DAO:
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertLicenceWithConfigurations(licenceWithConfigurations: LicenceWithConfigurations)
. Прямо сейчас ошибка «Сбой ограничения FOREIGN KEY (код 787 SQLITE_CONSTRAINT_FOREIGNKEY)», поэтому я указал @Index для класса LicenceConfig затем попытался установить внешний ключ в другом поле (потому что я прочитал, что с автоматически сгенерированным идентификатором в качестве внешних ключей это не будет работать), но все еще не работает. Могу ли я это сделать или я должен go вернуться с @Transaction и обработать вставки вручную?