Согласно docs , вы должны объявить все свойства в первичном конструкторе, который должен быть сериализован через @Parcelize
.Все остальные игнорируются.
ObjectBox не поддерживает ToOne
, поэтому вы должны написать пользовательский Parceler
.В конце ваше решение должно выглядеть так:
@Entity
@Parcelize
@TypeParceler<ToOne<Customer>, ToOneCustomerParceler>
class Order(
@Id var id: Long = 0,
var customer: ToOne<Customer>
) : Parcelable
@Entity
@Parcelize
class Customer(
@Id var id: Long = 0,
@Backlink var orders: List<Order>
) : Parcelable
object ToOneCustomerParceler : Parceler<ToOne<Customer>> {
override fun create(parcel: Parcel): ToOne<Customer> {
//Somehow recreate ToOne instance
...
}
override fun ToOne<Customer>.write(parcel: Parcel, flags: Int) {
val customer = target
...
}
}
Также не забудьте включить правильные зависимости:
dependencies {
compile "io.objectbox:objectbox-android:$objectboxVersion"
compile "io.objectbox:objectbox-kotlin:$objectboxVersion"
}
PS Используйте разные модели для каждой цели (@Entity
и@Parcelize
), даже если оба они одинаковы.Управлять ими гораздо проще, поскольку вы разделяете свои намерения на две модели, а не пытаетесь объединить все в одну.