According to docs, you have to declare all properties in primary constructor, which should be serialized via @Parcelize
. All other ones are ignored.
ObjectBox doesn't support ToOne
so you have to write custom Parceler
. In the end your solution should look like this:
@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
...
}
}
Also don't forget to include correct dependencies:
dependencies {
compile "io.objectbox:objectbox-android:$objectboxVersion"
compile "io.objectbox:objectbox-kotlin:$objectboxVersion"
}
P.S. Use different models for each purpose (@Entity
and @Parcelize
) even if both are the same. It is much easier to manage them since you separate your intentions into 2 models, rather than trying to push everything into single one.