And some more generic fix :

    for (EOModel model : ERXModelGroup.defaultGroup().models()) {
        for (EOEntity entity : model.entities()) {
            for (EORelationship relationship : entity.relationships()) {
                EOEntity destination = relationship.destinationEntity();
                if (destination != null && destination.parentEntity() !=
null) {
                    relationship.anyInverseRelationship();
                }
            }
        }
    }

Alex


2013/5/30 Alexis Tual <[email protected]>

> Ok despite my eyes bleeding and my brain melting, I continued to dig and
> found that at some point that EORelationship#anyInverseRelationship is
> called to order the changes. This can't find an inverse relationship and
> creates one in memory then calls EOEntity#setEdited, setting
> _attributesToSave to null...
> The relationship is between an entity from another model
> "RepartUefEtablissement" and the subentity "Ue", a quick workaround
> consists in calling anyInverseRelationship before the saveChanges() :
>
>  EOEntity entity = EOUtilities.entityForClass(ec,
> EORepartUefEtablissement.class);
> EORelationship relationship =
> entity.relationshipNamed(EORepartUefEtablissement.COMPOSANT_UE.key());
> relationship.anyInverseRelationship();
> Hope it will help someone else
>
> Alex
>
>
> 2013/5/30 Alexis Tual <[email protected]>
>
>> Hi list,
>>
>> this one is tedious, in a framework, we have a model with an abstract
>> entity "Composant" and subentities "Ap" and "Ue" mapped with vertical
>> inheritance.
>> In one application, this works with no error.
>> In another app, we have a SQL error when a instance of Ap and Ue are
>> inserted and saved :
>> ----> SQL for AP insertion is OK :
>> INSERT INTO SCO_SCOLARITE.COMPOSANT(ID_COMPOSANT, CODE, LL_COMPOSANT...
>> INSERT INTO SCO_SCOLARITE.AP(TYPE_AP_ID, SEUIL, NB_GROUPES...
>>
>> ----> SQL for Ue insertion is not OK :
>> INSERT INTO SCO_SCOLARITE.COMPOSANT(*ID_UE*, CODE, LL_COMPOSANT...
>>
>> It should be ID_COMPOSANT...
>>
>> So, I took my jd and digged down EOF, here's my found :
>> when generating SQL, ERXEntity#anyAttributeNamed is called in
>> EOSQLExpression#prepareInsertExpressionWithRow.
>> In this method, when EOEntity#anyAttributeNamed is called for the
>> attribute 'NeededByEOF0' of AP, it returns the right thing :
>>
>> <EOAttribute NeededByEOF0
>> name : 'NeededByEOF0'
>>  definition : 'sco_Composant.id'
>> className : 'java.lang.Number'
>> externalType : 'NUMBER'
>>  valueType : 'i'
>> precision : '38'
>> >
>>
>> whereas for the same attribute of UE, it returns null.. and this explains
>> why the primary key of the subentity is taken instead of the one from the
>> parent...
>> So why it returns null ? The responsible is attribute
>> EOEntity#_attributesToSave which is somehow unset...
>>
>> Lachlan Deck or anyone, any ideas ?
>>
>> Any help is appreciated,
>>
>> Alex
>>
>>
>>
>>
>>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to