Selon la documentation d'Objectify, les entités embarquées sont supportées :
Il existe un cas particulier lorsque vous intégrez une classe qui est elle-même une @Entity :
@Entity class Person { @Id Long id; } @Entity class Car { @Id Long id; Person person; }
Cela permettra d'intégrer l'entité Personne dans l'entité Voiture.
Cependant, lorsque l'on essaie d'enregistrer la classe suivante avec la relation Category-SubCategory(of type Category) :
@Entity
class Ctegory{
@Id String name;
Category subCategory;
}
ObjectifyService.register(Category.class);
J'ai StackOverflowError Exception :
java.lang.StackOverflowError
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)
Ma théorie est donc que ce type de relation "récursive" n'est pas pris en charge, bien qu'il s'agisse d'un cas d'utilisation courant et valable.
Est-ce que c'est vrai ? ou est-ce que je rate quelque chose ici ?