2 votes

Est-ce que Objectify peut supporter des entités embarquées du même type que l'entité embarquée ?

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 ?

0voto

Mangu Points 2461

Cette relation "récursive" est une amélioration en cours, selon la Commission européenne. un problème dans le dépôt Github officiel d'Objectify, donc, pour le moment, il n'est pas possible de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X