• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
permanentGlobalID not permanent
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

permanentGlobalID not permanent


  • Subject: permanentGlobalID not permanent
  • From: Jean-François Veillette <email@hidden>
  • Date: Wed, 07 May 2014 23:36:53 -0400

PrimaryKey obtained by permanentGlobalID() are not saved as the primaryKey on saveChanges().

I'm setting a global id as a reference for « soft relationship » (since it point to undefined object) instead of a « hard relationship » (usual when we store the pk).

The problem is that I get 2 primary key (yes 2 sequences number out of the database):
- the first come from the call to permanentGlobalID(), wich return 7985.
- the next come from the save of the object itself, it ask again for a sequence.
Result: the first reference is actually not pointing to the saved object!


Here is the code for the setter:

public void setReference(final ERXGenericRecord ref) {
EOKeyGlobalID pgid = ref.permanentGlobalID();
setReferenceGlobalID(ERXKeyGlobalID.globalIDForGID(pgid));
// added log to debug ...
final EOGlobalID gid = editingContext().globalIDForObject(ref);
log.debug("GlobalID: " + gid + "    permanent: " + pgid);
}

give: 
GlobalID: <EOTemporaryGlobalID: 0 0 127 0 0 1 0 0 -5 -116 1 0 0 0 1 69 -39 18 -94 -76 -125 18 82 -3>    permanent: _EOIntegralKeyGlobalID[AGA_Participant (java.lang.Integer)7985]

It's a wonder project, all EOs (ultimately) inherit from ERXGenericRecord.
I'm using ERXEC default factory to get editingContext.

From the documentation it says it is supposed to work, so I guess I have something misconfigured.

But from debuging the code it doesn't look at all like it's supossed to work!
When deep inside the saveChanges(),  it simply call toBeSavedEO.__globalID() which still return the temporaryGlobalID instead of the permanent one.
To illustrate here is a patch that make it work:
$ git diff Sources/
diff --git a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEC.java b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEC.java
index fde6607..99fe0c0 100644
--- a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEC.java
+++ b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEC.java
@@ -931,6 +931,12 @@ public class ERXEC extends EOEditingContext {
       public EOGlobalID globalIDForObject(EOEnterpriseObject eoenterpriseobject) {
               boolean wasAutoLocked = autoLock("globalIDForObject");
               try {
+                       if (eoenterpriseobject instanceof ERXGenericRecord) {
+                               ERXGenericRecord ereo = (ERXGenericRecord)eoenterpriseobject;
+                               if (ereo._permanentGlobalID != null) {
+                                       return ereo._permanentGlobalID;
+                               }
+                       }
                       return super.globalIDForObject(eoenterpriseobject);
               }
               finally {
diff --git a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXGenericRecord.java b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXGenericRecord.java
index 8c11ada..da21610 100644
--- a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXGenericRecord.java
+++ b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXGenericRecord.java
@@ -904,8 +904,8 @@ public class ERXGenericRecord extends EOGenericRecord implements ERXGuardedObjec
               }
               return freshObject;
       }
-       
-       private EOKeyGlobalID _permanentGlobalID;
+
+       EOKeyGlobalID _permanentGlobalID;

       /**
        * This method allows you to compute what the permanent EOGlobalID will be




What am I missing??? (presuming it's a configuration issue and not a bug)

Thanks,

--
jfv

 _______________________________________________
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

  • Follow-Ups:
    • Re: permanentGlobalID not permanent
      • From: Ralf Schuchardt <email@hidden>
    • Re: permanentGlobalID not permanent
      • From: Alexander Spohr <email@hidden>
  • Prev by Date: Re: ERPDFGeneration problem
  • Next by Date: Re: Wonder build issue?
  • Previous by thread: Re: Wonder build issue?
  • Next by thread: Re: permanentGlobalID not permanent
  • Index(es):
    • Date
    • Thread