throw new IllegalStateException ("no mapping for: " + m.getPath());
    private void genPath(final Path path) {        Path[] cols = getColumns(path);        if (cols != null) {            return;        }        Parameter p = m_query.getSignature().getParameter(path);        if (p != null) {            setColumns(path, RDBMSEngine.getKeyPaths                       (p.getObjectType(), p.getPath()));            return;        }        genPath(path.getParent());        Property prop = m_query.getSignature().getProperty(path);        ObjectMap map = Root.getRoot().getObjectMap(prop.getContainer());        Mapping m = map.getMapping(Path.get(prop.getName()));        m.dispatch(new Mapping.Switch() {                public void onValue(Value m) {                    Path alias = addJoin                        (path, m.getColumn().getTable().getPrimaryKey());                    setColumns(path, new Path[] {                        Path.add(alias, m.getColumn().getName())                    });                }                public void onJoinTo(JoinTo m) {                    Path alias = addJoin(path, m.getKey());                    setColumns(path, getPaths(alias, m.getKey()));                }                public void onJoinFrom(JoinFrom m) {                    Path alias = addJoin(path, m.getKey());                    setColumns(path, getPaths                               (alias, m.getKey().getTable().getPrimaryKey()));                }                public void onJoinThrough(JoinThrough m) {                    Path alias = addJoin(path, m.getFrom());                    setColumns(path, getPaths(alias, m.getTo()));                }                public void onStatic(Static m) {                    // do nothing                }            });    }