0

Modeshape と modeshape-connector-jdbc-metadata を使用しています。ストレージ内のテーブルを表すすべてのノードを取得したいと考えています。そのノードには[mj:catalog]mixin タイプがあります。

次のコードを使用してストレージをクエリしています:

    public List getDatabases() throws RepositoryException {
        // Obtain the query manager for the session ...
        QueryManager queryManager = dbSession.getWorkspace().getQueryManager();

        // Create a query object ...
        Query query = queryManager.createQuery("SELECT * FROM [mj:table]"
                , Query.JCR_SQL2);
        // Execute the query and get the results ...
        QueryResult result = query.execute();

        // Iterate over the nodes in the results ...
        NodeIterator nodeIter = result.getNodes();

        List stringResult = new ArrayList();
        while (nodeIter.hasNext()) {
            stringResult.add(nodeIter.nextNode().getName());
        }

        return stringResult;
    }

しかし、常に空のリストを返します。

また、次のクエリを使用してクエリを実行しようとしました:

SELECT unst.*, tbl.* FROM [nt:unstructured] AS unst 
    JOIN [mj:table] AS tbl ON ISSAMENODE(unst,tbl)
SELECT * FROM [nt:unstructured] WHERE [jcr:mixinTypes] = [mj:table]

しかし、結果は同じままです。私が間違っていることは何ですか?

助けてくれてありがとう。

4

1 に答える 1

0

データベース メタデータ ノードが自動的にインデックス化されないという既知の問題があります。簡単な回避策は、JCR セッションのgetWorkspace()インスタンスをorg.modeshape.jcr.api.Workspace(ModeShape のワークスペースのパブリック API) にキャストし、reindex(String path)メソッドを呼び出して、データベース カタログ ノード (または必要に応じて先祖) へのパスを渡すことです。

于 2012-08-30T11:33:42.687 に答える