根据docs,您必须在主构造函数中声明所有属性,这些属性应通过@Parcelize
. 所有其他的都被忽略。
ObjectBox 不支持ToOne
,所以你必须编写 custom 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
)使用不同的模型,即使两者相同。管理它们要容易得多,因为您将您的意图分成 2 个模型,而不是试图将所有内容都集中到一个模型中。