anonymous = !pinfo.named;
    public INode getParent () {	// check what's specified in the type.properties for this node.	ParentInfo[] parentInfo = null;	if (dbmap != null && dbmap.isRelational () &&			(lastParentSet < dbmap.getLastTypeChange() || lastParentSet < lastmodified))	    parentInfo = dbmap.getParentInfo ();	// check if current parent candidate matches presciption, if not, try to get it	if (parentInfo != null) {	    for (int i=0; i<parentInfo.length; i++) {	        ParentInfo pinfo = parentInfo[i];	        INode pn = getNode (pinfo.propname, false);	        if (pinfo.isroot && pn == null)	            pn = nmgr.getNode ("0", nmgr.getDbMapping ("root"));	        if (pn != null) {	            // see if dbmapping specifies anonymity for this node	            anonymous = !pinfo.named;	            if (pinfo.virtualname != null)	                pn = pn.getNode (pinfo.virtualname, false);	            DbMapping dbm = pn == null ? null : pn.getDbMapping ();	            if (dbm != null && dbm.getSubnodeGroupby () != null) {	                // check for groupby	                try {	                    Relation rel = (Relation) dbmap.db2prop.get (dbm.getSubnodeGroupby());	                    pn = pn.getSubnode (getString (rel.propname, false));	                } catch (Exception ignore) {}	            }	            if (pn != null) {	                setParent ((Node) pn);	                lastParentSet = System.currentTimeMillis ();	                return pn;	            }	        }	    }	}	// fall back to heuristic parent (the node that fetched this one from db)	if (parentID == null)	    return null;	return nmgr.getNode (parentID, parentmap);    }