Объект схемы БД 1 выглядел так:
open class LicenseAgreementEntity(
@PrimaryKey
var licenseAgreementID: String = UUID.randomUUID().toString(),
var version: String = "",
var acceptAgreementDate: String = "",
var acceptAgreementStatus: String = AcceptAgreementStatus.ACCEPTED.name
) : RealmObject()
В схеме БД 2 объекта будут выглядеть так:
open class LicenseAgreementEntity(
@PrimaryKey
var accountID: String = UUID.randomUUID().toString(),
var version: String = "",
var acceptAgreementDate: String = "",
var acceptAgreementStatus: String = AcceptAgreementStatus.ACCEPTED.name
) : RealmObject()
Мой код миграции выглядит следующим образом
realm?.let { transactionRealm ->
val schema = transactionRealm.schema
val licenseAgreementSchema = schema.get(TABLE_LICENSE_AGREEMENT_ENTITY) ?: return
licenseAgreementSchema
.renameField(FIELD_LICENSE_AGREEMENT_ID, FIELD_ACCOUNT_ID)
.transform {
it.set(FIELD_ACCOUNT_ID, preference.accountID)
}
}
И проблема в том, что мне нужно обновить поле во время миграции на другое значение.Я пробовал разные варианты добавления / удаления поля и добавления / удаления первичного ключа, но похоже, что операция преобразования разрушает его.Любые идеи о том, как переименовать поле первичного ключа и изменить его значение при миграции?
Исключение:
Caused by: java.lang.IllegalArgumentException: Primary key field 'accountID' cannot be changed after object was created.