Re: Polymorphic Relationship
Re: Polymorphic Relationship
- Subject: Re: Polymorphic Relationship
- From: Ken Anderson <email@hidden>
- Date: Fri, 24 Nov 2017 14:02:08 -0500
“JUST SAY NO”
Seriously, EOF does NOT like changing the inheritance structure of saved
objects. Take Chuck’s advice - change your design pattern.
Ken
> On Nov 24, 2017, at 1:05 PM, Chuck Hill <email@hidden> wrote:
>
> 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> on behalf of
> remy <email@hidden>
> Date: Friday, November 24, 2017 at 2:30 AM
> To: "email@hidden" <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)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to 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