Objectify 是否可以支持与嵌入实体相同类型的嵌入实体?
Can Objectify support embedded entities of the same type like the embedding entity?
根据 Objectify 文档支持嵌入式实体:
There is a special case when you embed a class which is itself an @Entity:
@Entity
class Person {
@Id Long id;
}
@Entity
class Car {
@Id Long id;
Person person;
}
This will embed the Person entity in the Car entity.
但是,当尝试注册以下 Class 与类别-子类别(类别类型)关系时:
@Entity
class Ctegory{
@Id String name;
Category subCategory;
}
ObjectifyService.register(Category.class);
我遇到了 WhosebugError 异常:
java.lang.WhosebugError
at java.lang.invoke.MemberName.isGetter(Unknown Source)
at java.lang.invoke.MemberName.getMethodOrFieldType(Unknown Source)
at java.lang.invoke.DirectMethodHandle.make(Unknown Source)
at java.lang.invoke.DirectMethodHandle.make(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.getDirectFieldCommon(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.getDirectFieldNoSecurityManager(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.unreflectField(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.unreflectGetter(Unknown Source)
at com.googlecode.objectify.impl.FieldProperty.<init>(FieldProperty.java:41)
at com.googlecode.objectify.impl.KeyMetadata.findKeyFields(KeyMetadata.java:77)
at com.googlecode.objectify.impl.KeyMetadata.<init>(KeyMetadata.java:50)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEntityClassTranslator(ClassTranslatorFactory.java:64)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:49)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:36)
at com.googlecode.objectify.impl.translate.Translators.create(Translators.java:138)
at com.googlecode.objectify.impl.translate.Translators.get(Translators.java:117)
at com.googlecode.objectify.impl.translate.CreateContext.getTranslator(CreateContext.java:27)
at com.googlecode.objectify.impl.translate.ClassPopulator.<init>(ClassPopulator.java:88)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEntityClassTranslator(ClassTranslatorFactory.java:66)
所以我的理论是不支持这种 'recursive' 关系,尽管它是一个有效的常见用例。
这是真的吗?还是我在这里想念什么?
根据 Objectify 的官方 Github 存储库中的 an issue,此 'recursive' 关系正在改进中,因此,目前还无法实现。
根据 Objectify 文档支持嵌入式实体:
There is a special case when you embed a class which is itself an @Entity:
@Entity class Person { @Id Long id; } @Entity class Car { @Id Long id; Person person; }
This will embed the Person entity in the Car entity.
但是,当尝试注册以下 Class 与类别-子类别(类别类型)关系时:
@Entity
class Ctegory{
@Id String name;
Category subCategory;
}
ObjectifyService.register(Category.class);
我遇到了 WhosebugError 异常:
java.lang.WhosebugError
at java.lang.invoke.MemberName.isGetter(Unknown Source)
at java.lang.invoke.MemberName.getMethodOrFieldType(Unknown Source)
at java.lang.invoke.DirectMethodHandle.make(Unknown Source)
at java.lang.invoke.DirectMethodHandle.make(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.getDirectFieldCommon(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.getDirectFieldNoSecurityManager(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.unreflectField(Unknown Source)
at java.lang.invoke.MethodHandles$Lookup.unreflectGetter(Unknown Source)
at com.googlecode.objectify.impl.FieldProperty.<init>(FieldProperty.java:41)
at com.googlecode.objectify.impl.KeyMetadata.findKeyFields(KeyMetadata.java:77)
at com.googlecode.objectify.impl.KeyMetadata.<init>(KeyMetadata.java:50)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEntityClassTranslator(ClassTranslatorFactory.java:64)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:49)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:36)
at com.googlecode.objectify.impl.translate.Translators.create(Translators.java:138)
at com.googlecode.objectify.impl.translate.Translators.get(Translators.java:117)
at com.googlecode.objectify.impl.translate.CreateContext.getTranslator(CreateContext.java:27)
at com.googlecode.objectify.impl.translate.ClassPopulator.<init>(ClassPopulator.java:88)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEntityClassTranslator(ClassTranslatorFactory.java:66)
所以我的理论是不支持这种 'recursive' 关系,尽管它是一个有效的常见用例。
这是真的吗?还是我在这里想念什么?
根据 Objectify 的官方 Github 存储库中的 an issue,此 'recursive' 关系正在改进中,因此,目前还无法实现。