DatabaseField targetKey = refmapping.getSourceToTargetKeyFields().get(accessor.getDatabaseField()); CMPPolicy refPolicy = refmapping.getReferenceDescriptor().getCMPPolicy(); if (refPolicy.isCMP3Policy()){ Class pkClass = refPolicy.getPKClass(); if ((pkClass != null) && (pkClass != fieldValue.getClass()) && (!pkClass.isAssignableFrom(fieldValue.getClass()))) {
/** * INTERNAL: * This method will access the target relationship and create a list of PKs of the target entities. * This method is used in combination with the CachedValueHolder to store references to PK's to be loaded * from a cache instead of a query. */ public Object[] buildReferencesPKList(Object entity, Object attribute, AbstractSession session){ ClassDescriptor referenceDescriptor = getReferenceDescriptor(); Object collection = this.indirectionPolicy.getRealAttributeValueFromObject(entity, attribute); Object[] result = new Object[this.containerPolicy.sizeFor(collection)]; Iterator iterator = (Iterator)this.containerPolicy.iteratorFor(collection); int index = 0; while(iterator.hasNext()){ Object target = iterator.next(); if (target != null){ CMPPolicy policy = referenceDescriptor.getCMPPolicy(); if (policy != null && policy.isCMP3Policy()){ result[index] = policy.createPrimaryKeyInstance(target, session); }else{ result[index] = referenceDescriptor.getObjectBuilder().extractPrimaryKeyFromObject(target, session); } ++index; } } return result; }
/** * INTERNAL: This method will access the target relationship and create a * list of PKs of the target entities. This method is used in combination * with the CachedValueHolder to store references to PK's to be loaded from * a cache instead of a query. */ public Object[] buildReferencesPKList(Object entity, Object attribute, AbstractSession session) { ClassDescriptor referenceDescriptor = getReferenceDescriptor(); Object target = this.indirectionPolicy.getRealAttributeValueFromObject(entity, attribute); Object[] result = new Object[1]; if (target != null){ CMPPolicy policy = referenceDescriptor.getCMPPolicy(); if (policy != null && policy.isCMP3Policy()) { result[0] = policy.createPrimaryKeyInstance(target, session); } else { result[0] = referenceDescriptor.getObjectBuilder().extractPrimaryKeyFromObject(target, session); } } return result; }
if (cmpPolicy.isCMP3Policy()) {
if ((refPolicy!=null) && refPolicy.isCMP3Policy() && (refPolicy.getPKClass() == currentKeyClass)){
DatabaseField targetKey = refmapping.getSourceToTargetKeyFields().get(pkElementArray[index].getDatabaseField()); CMPPolicy refPolicy = refmapping.getReferenceDescriptor().getCMPPolicy(); if (refPolicy.isCMP3Policy()){ Class aPKClass = refPolicy.getPKClass(); if ((aPKClass != null) && (aPKClass != fieldValue.getClass()) && (!aPKClass.isAssignableFrom(fieldValue.getClass()))) {