anchor.diff:  	/* properties */
   
   	property name="table" type="string" persistent="false";
  +	property name="parentTable" type="string" persistent="false";
   	property name="IDField" type="string" persistent="false";
   	property name="IDFieldType" type="string" persistent="false";
   	property name="IDFieldGenerator" type="string" persistent="false" ;
  
positive.code: 				// We have a field ending with _ID, which typically indicates a "foriegn key" property to a tabled named whatever prefixes the _ID
  				// Using this convention, if the parent table is "orders" and the field name is "orders_ID" we can load the parent
  				try{
  					var newTableName = var propertyName = listDeleteAt( col.name, listLen( col.name, '_' ), '_' );
  					if( structKeyExists( getDynamicMappings(), col.name ) ){
  						newTableName = getDynamicMappings()[ col.name ];
  					}
  					var newObj = new( table = newTableName, dao = this.getDao() );
  					newObj.setTable( newTableName );
  					// Load data into new object
  					writeLog('Loading dynamic relationship entity #newTableName# with id of #variables[col.name]#');
  					newObj.load( variables[ col.name ], lazy );
  					writeLog('Well, was there anything to load?: #yesNoFormat( !newObj.isNew() )#')
  					// Create setter methods for this relationship property.
  					variables[ "set" & propertyName ] = _setter;
  					// Now set the relationhsip property value to the newly created and instantiated object.
  					variables[ propertyName ] = this[ propertyName ] = variables.properties[ propertyName ] = newObj;
  					// Append the relationship property to the meta properties
  					arrayAppend( variables.meta.properties, {
  										"column" = propertyName,
  										"name" = propertyName,
  										"dynamic" = true,
  										"cfc" = "BaseModelObject",
  										"table" = newTableName,
  										"inverseJoinColumn" = newObj.getIDField(),
  										"fkcolumn" = col.name,
  										"fieldType" = "one-to-many"
  									} );
  					this[ "get" & propertyName ] = getFunc;
  
  				} catch ( any e ){
  					if( e.type != 'BMO' ){
  						// throw(e.detail);
  
negative.code: 	* correspond (via name) to properties in the entity.  See convenience function 'populate()'
  	*
  	**/
  	public any function load( required any ID, boolean lazy = false, string parentTable = getParentTable() ){
  		var LOCAL = {};
  		var props = variables.meta.properties;
  
  		if( isSimpleValue( ID ) ){
  			var cachedObject = cacheGet( '#getTable()#-#ID#' );
  			writeLog('loading #getTable()#-#ID#, do we already have it? #yesNoFormat(!isNull( cachedObject ))#');
  			if( !isNull( cachedObject ) ){
  				// writeDump(cachedObject);abort;
  				// this = cachedObject ;
  				// return this;
  				// this = cachedObject;
  				for( prop in cachedObject ){
  					variables[ prop ] = this[ prop ] = cachedObject[ prop ];
  				}
  				return this;
  			}
  		}
  
  		if ( isStruct( arguments.ID ) || isArray( arguments.ID ) ){
  			// If the ID field was part of the struct, load the record first. This allows updating vs inserting
  