throw new IllegalArgumentException("No such object: " + obj);
throw new IllegalArgumentException ("No such object: " + getSessionKey(obj));
    PropertyData fetchPropertyData(Object obj, Property prop) {        ObjectData od = fetchObjectData(obj);        if (od == null) {            throw new IllegalArgumentException("No such object: " + obj);        }        PropertyData pd;        if (od.hasPropertyData(prop)) {            pd = od.getPropertyData(prop);        } else if (prop.isCollection()) {            pd = new PropertyData(od, prop, POS.getPersistentCollection                                  (this, getDataSet(obj, prop)));        } else if (od.isInfantile()){            pd = new PropertyData(od, prop, null);        } else {            RecordSet rs = getDataSet(obj, prop).getCursor().execute();            Map values = null;            if (rs.next()) {                values = rs.load(this);                if (rs.next()) {                    throw new IllegalStateException                        ("Query returned too many rows");                }            }            if (prop.getType().isKeyed()) {		if (values == null) {		    load(obj, prop, null);		} else {		    load(obj, prop, values.get(null));		}            } else if (values == null) {                throw new MetadataException                    (prop.getRoot(), prop,                     "Query for: " + prop.getContainer() + "." + prop                     + " failed to return rows" );	    }            pd = od.getPropertyData(prop);            if (pd == null) {                throw new IllegalStateException                    ("Query failed to retrieve property");            }        }        return pd;    }