Re: Polymorphic Relationship
Re: Polymorphic Relationship
- Subject: Re: Polymorphic Relationship
- From: remy <email@hidden>
- Date: Wed, 29 Nov 2017 08:31:59 +0000
- Feedback-id: 1.eu-west-1.qLMkdL013duCXQE3E8SaZ3cBmrTvRp8OpMevsMlTH2s=:AmazonSES
Merci Jean-François, effectivement c’est plus simple en Français :)
Sais-tu où je pourrai trouver un exemple de ce fonctionnement du design pattern
Role en WO?
Pouvons-nous communiquer en direct? Je développe en WO depuis 8 ans et j’ai un
problème sur le déploiement. Pourrais-tu m’aider sur ce 2nd point?
Rémy.
> Le 28 nov. 2017 à 17:22, Jean-François Veillette
> <email@hidden> a écrit :
>
> Bonjour Remy, je me permets de te répondre directement en français, ce sera
> probablement plus facile pour nous deux de communiquer dans notre langue
> maternelle.
>
>
> Ce que Chuck propose c’est d’utilise le patron des « Roles » au lieu
> d’utiliser une structure de classe.
> L’idée étant qu’un objet peut changer de rôle, mais ne peut pas changer de
> classe.
> La logique qui aurait été mise dans la classe sera donc reléguée dans le rôle
> (en « sous-traitance »).
>
> Pour ce qui est des relations polymorphes proprement dites, EOF n’a pas de
> problème avec ça.
> Cependant pour réduire le nombre de requêtes SQL généré par EOF, on peut
> l’aider en encodant la classe (en fait, cela fera référence à sa EOEntity)
> dans la clef primaire.
> En simplifiant tu aurais quelque chose qui ressemblera à
> 0-1024 sont les objets d’entité A
> 1025-2048 sont les objets d’entité B
> … etc.
> En fait, l’idée est de prendre un long (64 bits) et d’en réserver un certain
> nombre bits pour y encoder l’entité. De mémoire, j’avais un encodage
> d’entité sur 8 bits (256 entités possibles) et une séquence de 56bits (bien
> assez long pour mon cas d’utilisation).
> J’ai utilisé cette technique avec succès, ça simplifie beaucoup les cas de
> relations et les clefs externes. Si je pointe sur une hiérarchie X, avec la
> clef je peux donc extraire exactement la partie « entité » et donc à quelle
> classe (ou quelle table) je fais référence.
>
> Bienvenue dans le monde WO !
> --
> Jean-François Veillette
> Analyste programmeur / Software Engineer
>
>
>> On Nov 28, 2017, at 4:47 AM, remy <email@hidden
>> <mailto:email@hidden>> wrote:
>>
>> Hi Chuck,
>>
>> How do I this? I think change my method for create my EntitySub but it
>> interests me to know this solution. Mostly : "discarding all cached
>> knowledge of EO".
>>
>>> If that is what you need, then look at the Role design pattern instead
>> > Where I can find it?
>>
>> Rémy
>>
>>> Le 24 nov. 2017 à 19:05, Chuck Hill <email@hidden
>>> <mailto:email@hidden>> a écrit :
>>>
>>> Remy,
>>>
>>> You *can* get an EO to change its class over time by changing the
>>> restricting qualifier, discarding all cached knowledge of EO and doing a
>>> fetch. *But* that is really, really not recommended. If that is what you
>>> need, then look at the Role design pattern instead. That is probably
>>> closer to what you need.
>>>
>>> If you just need to create instances of different classes based on a string
>>> (EntitySub.ENTITY_NAME) then create a factory method that takes the string
>>> and returns an instance of a sub-class of EntityAbstract. All of the
>>> information needed to do this is in the model and can be referenced at
>>> runtime. It is quite simple. The way you are doing it below is just wrong.
>>>
>>> Chuck
>>>
>>> From: Webobjects-dev
>>> <webobjects-dev-bounces+chill=email@hidden
>>> <mailto:webobjects-dev-bounces+chill=email@hidden>> on
>>> behalf of remy <email@hidden <mailto:email@hidden>>
>>> Date: Friday, November 24, 2017 at 2:30 AM
>>> To: "email@hidden
>>> <mailto:email@hidden>" <email@hidden
>>> <mailto:email@hidden>>
>>> Subject: Polymorphic Relationship
>>>
>>> Hi,
>>>
>>> I want make an polymorphic entity.
>>>
>>> I have an Entity Abstract named "EntityAbstract" and a subclass Entity
>>> named "EntitySub" where the qualifier is (refEntityName=‘EntitySub').
>>> I have third Entity named "Relation" that has an relationship with
>>> "EntitySub".
>>>
>>> I have a problem when :
>>>
>>> EOEditingContext editingContext = ERXEC.newEditingContext();
>>>
>>> int relationID = Integer.valueOf(relation().primaryKeyInTransaction());
>>>
>>> EntityAbstract entityAbstract =
>>> ERXEOControlUtilities.createAndInsertObject(editingContext(),
>>> EntityAbstract.class);
>>> entityAbstract.setRefEntityName(EntitySub.ENTITY_NAME);
>>> entityAbstract.setRefEntityID(relationID);
>>>
>>> editingContext().saveChanges();
>>>
>>> ERXEOControlUtilities.refreshObject(relation());
>>> for (EntityAbstract e : relation().entitySubs())
>>> System.err.println(e); // Print <your.app.model.EntityAbstract
>>>
>>> How to print <Entity pk:"..."> and not <EntityAbstract pk:"..."> ?
>>>
>>> I don't want use the class "Entity" for
>>> ERXEOControlUtilities.createAndInsertObject
>>>
>>> Do you have an idea?
>>>
>>> I tested :
>>>
>>> eo.invalidateAllObjects(); eo.parentObjectStore().invalidateAllObjects();
>>> eo.rootObjectStore().invalidateAllObjects();
>>> It does not work...
>>>
>>> The project : https://github.com/algodata44/PolymorphicRelationship
>>> <https://github.com/algodata44/PolymorphicRelationship>
>>> Use DB H2
>>>
>>> Thx
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list (email@hidden
>> <mailto:email@hidden>)
>> Help/Unsubscribe/Update your Subscription:
>>
>>
>> This email sent to email@hidden
>> <mailto:email@hidden>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden