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=gevityinc....@lists.apple.com> on behalf of remy 
<r...@algodata.fr>
Date: Friday, November 24, 2017 at 2:30 AM
To: "webobjects-dev@lists.apple.com" <webobjects-dev@lists.apple.com>
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
Use DB H2

Thx
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to