Class CopyKeyFieldsFromObjectId

java.lang.Object
org.datanucleus.enhancer.ClassMethod
org.datanucleus.enhancer.methods.CopyKeyFieldsFromObjectId

public class CopyKeyFieldsFromObjectId extends ClassMethod
Method to generate the method "dnCopyKeyFieldsFromObjectId" using ASM. For datastore/nondurable identity this is
 public void dnCopyKeyFieldsFromObjectId(Persistable.ObjectIdFieldConsumer fc, Object oid)
 {
 }
 
and for SingleFieldIdentity it is
 public void dnCopyKeyFieldsFromObjectId(Persistable.ObjectIdFieldConsumer fc, Object oid)
 {
     if (fc == null)
         throw new IllegalArgumentException("ObjectIdFieldConsumer is null");
     if (!(oid instanceof YYYIdentity))
         throw new ClassCastException("oid is not instanceof YYYIdentity");
     YYYIdentity o = (YYYIdentity) oid;
     fc.storeYYYField(1, o.getKey());
 }
 
and for user-defined primary keys
 public void dnCopyKeyFieldsFromObjectId(Persistable.ObjectIdFieldConsumer fc, Object oid)
 {
     if (fc == null)
         throw new IllegalArgumentException("ObjectIdFieldConsumer is null");
     if (!(oid instanceof UserPrimaryKey))
         throw new ClassCastException("oid is not instanceof mydomain.UserPrimaryKey");
     UserPrimaryKey o = (UserPrimaryKey) oid;
     try
     {
         fc.storeYYYField(1, o.id);
         fc.storeZZZField(2, o.name);
     }
     catch(Exception e) {}
 }
 
and for CompoundIdentity
 public void dnCopyKeyFieldsFromObjectId(Persistable.ObjectIdFieldConsumer fc, Object oid)
 {
     if (fc == null)
         throw new IllegalArgumentException("ObjectIdFieldConsumer is null");
     if (!(oid instanceof UserPrimaryKey))
         throw new ClassCastException("oid is not instanceof mydomain.UserPrimaryKey");
     UserPrimaryKey o = (UserPrimaryKey) oid;
     try
     {
         fc.storeYYYField(1, o.id);
         fc.storeZZZField(2, dnGetPersistenceManager().getObjectById(o.zzz, false));
     }
     catch (Exception e) {}
 }
 
(the try-catch is for cases where we set the fields with reflection and it can throw an exception). There are some differences for fields .v. properties and also if fields in the PK are private.
  • Constructor Details

    • CopyKeyFieldsFromObjectId

      public CopyKeyFieldsFromObjectId(ClassEnhancer enhancer, String name, int access, Object returnType, Object[] argTypes, String[] argNames)
      Constructor.
      Parameters:
      enhancer - ClassEnhancer
      name - Name of method
      access - Access type
      returnType - Return type
      argTypes - Argument types
      argNames - Argument names
  • Method Details