} else if (state != TRANSIENT && (prel.virtual || prel.accessor != null || prel.groupby != null)) {
}   else if (state != TRANSIENT && propRel.createPropertyOnDemand ()) {
    protected Property getProperty (String propname, boolean inherit) {	// nmgr.logEvent ("GETTING PROPERTY: "+propname);	if (propname == null)	    return null;	Property prop = propMap == null ? null : (Property) propMap.get (propname.toLowerCase ());	// See if this could be a relationally linked node which still doesn't know	// (i.e, still thinks it's just the key as a string)	DbMapping pmap = dbmap == null ? null : dbmap.getExactPropertyMapping (propname);	if (pmap != null && prop != null && prop.getType() != IProperty.NODE) {	    // this is a relational node stored by id but we still think it's just a string. Fix it	    prop.convertToNodeReference (pmap);	}	// the property does not exist in our propmap - see if we can create it on the fly,	// either because it is mapped from a relational database or defined as virtual node	if (prop == null && dbmap != null) {	    Relation prel =  dbmap.getPropertyRelation (propname);	    Relation srel = dbmap.getSubnodeRelation ();	    if (prel == null && srel != null && srel.groupby != null)	        prel = srel;	    if (prel == null)	        prel = dbmap.getPropertyRelation ();	    if (prel != null) {	        // if what we want is a virtual node, fetch anyway.	        if (state == TRANSIENT && prel.virtual) {	            INode node = new Node (propname, prel.getPrototype (), nmgr);	            node.setDbMapping (prel.getVirtualMapping ());	            setNode (propname, node);	            prop = (Property) propMap.get (propname);	        // if this is from relational database only fetch if this node is itself persistent.	        } else if (state != TRANSIENT && (prel.virtual || prel.accessor != null || prel.groupby != null)) {	            // this may be a relational node stored by property name	            try {	                Node pn = nmgr.getNode (this, propname, prel);	                if (pn != null) {	                    if (pn.parentHandle == null && !"root".equalsIgnoreCase (pn.getPrototype ())) {	                        pn.setParent (this);	                        pn.name = propname;	                        pn.anonymous = false;	                    }	                    prop = new Property (propname, this, pn);	                }	            } catch (RuntimeException nonode) {	                // wasn't a node after all	            }	        }	    }	}		if (prop == null && inherit && getParent () != null && state != TRANSIENT) {	    prop = ((Node) getParent ()).getProperty (propname, inherit);	}	return prop;    }