/** * Invokes parseRelations for relation entity and set relational entity * within entity * * @param entity * @param pd * @param targetEntityMetadata * @param relationEntity * @param relation * @param lazilyloaded * @param relationStack */ private void onParseRelation(Object entity, final PersistenceDelegator pd, EntityMetadata targetEntityMetadata, Object relationEntity, Relation relation, boolean lazilyloaded, Map<Object, Object> relationStack) { parseRelations(entity, getEntity(relationEntity), getPersistedRelations(relationEntity), pd, targetEntityMetadata, lazilyloaded, relationStack); // if relation ship is unary, no problem else we need to add setRelationToEntity(entity, relationEntity, relation); }
/** * After successfully parsing set relational entity object within entity * object. * * @param entity * @param relationEntity * @param relation */ private void setRelationToEntity(Object entity, Object relationEntity, Relation relation) { if (relation.getTargetEntity().isAssignableFrom(getEntity(relationEntity).getClass())) { if (relation.isUnary()) { PropertyAccessorHelper.set(entity, relation.getProperty(), getEntity(relationEntity)); } else { Object associationObject = PropertyAccessorHelper.getObject(entity, relation.getProperty()); if (associationObject == null || ProxyHelper.isProxyOrCollection(associationObject)) { associationObject = PropertyAccessorHelper.getCollectionInstance(relation.getProperty()); PropertyAccessorHelper.set(entity, relation.getProperty(), associationObject); } ((Collection) associationObject).add(getEntity(relationEntity)); } } }
PersistenceCacheManager.addEntityToPersistenceCache(getEntity(relationEntity), pd, PropertyAccessorHelper.getId(relationEntity, targetEntityMetadata));
PersistenceCacheManager.addEntityToPersistenceCache(getEntity(relationEntity), pd, PropertyAccessorHelper.getId(relationEntity, metadata));