Package org.datanucleus.enhancer.methods
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 ispublic void dnCopyKeyFieldsFromObjectId(Persistable.ObjectIdFieldConsumer fc, Object oid) { }
and for SingleFieldIdentity it ispublic 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 keyspublic 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 CompoundIdentitypublic 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.
-
-
Field Summary
-
Fields inherited from class org.datanucleus.enhancer.ClassMethod
access, argNames, argTypes, enhancer, exceptions, methodName, returnType, visitor
-
-
Constructor Summary
Constructors Constructor Description CopyKeyFieldsFromObjectId(ClassEnhancer enhancer, String name, int access, Object returnType, Object[] argTypes, String[] argNames)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
execute()
Method to add the contents of the class method.static CopyKeyFieldsFromObjectId
getInstance(ClassEnhancer enhancer)
-
Methods inherited from class org.datanucleus.enhancer.ClassMethod
close, equals, getAccess, getClassEnhancer, getDescriptor, getMethodAdditionMessage, getName, getNamer, hashCode, initialise, initialise
-
-
-
-
Constructor Detail
-
CopyKeyFieldsFromObjectId
public CopyKeyFieldsFromObjectId(ClassEnhancer enhancer, String name, int access, Object returnType, Object[] argTypes, String[] argNames)
Constructor.- Parameters:
enhancer
- ClassEnhancername
- Name of methodaccess
- Access typereturnType
- Return typeargTypes
- Argument typesargNames
- Argument names
-
-
Method Detail
-
getInstance
public static CopyKeyFieldsFromObjectId getInstance(ClassEnhancer enhancer)
-
execute
public void execute()
Method to add the contents of the class method.- Specified by:
execute
in classClassMethod
-
-