if (constraints[i].isGroupby) continue;
    public void setConstraints (Node parent, Node child) {	INode home = parent.getNonVirtualParent ();	for (int i=0; i<constraints.length; i++) {	    // don't set groupby constraints since we don't know if the	    // parent node is the base node or a group node	    if (constraints[i].isGroupby)	        continue;	    Relation crel = otherType.columnNameToRelation (constraints[i].foreignName);	    if (crel != null) {	        // INode home = constraints[i].isGroupby ? parent : nonVirtual;	        String localName = constraints[i].localName;	        if (localName == null  || localName.equalsIgnoreCase (ownType.getIDField ())) {	            INode currentValue = child.getNode (crel.propName, false);	            // we set the backwards reference iff the reference is currently unset, if	            // is set to a transient object, or if the new target is not transient. This	            // prevents us from overwriting a persistent refererence with a transient one,	            // which would most probably not be what we want.	            if (currentValue == null ||				(currentValue != home &&				(currentValue.getState() == Node.TRANSIENT ||				home.getState() != Node.TRANSIENT)))	                child.setNode (crel.propName, home);	        } else {	            String value = null;	            if (ownType.isRelational ())	                value = home.getString (ownType.columnNameToProperty (localName), false);	            else	                value = home.getString (localName, false);	            if (value != null) {	                child.setString (crel.propName, value);	            }	        }	    }	}    }