0

ルートには、タイプsling:folderのpendingという名前の 1 つのフォルダーが含まれます。

nt:unstructured型のノードの数があり、長い値の名前があり、その長い値は私のコード処理にとって非常に重要です。

ここで、この保留中のフォルダーから上位 20 個のノード (20 個の最小ノード名、つまり long 値) のデータを取得したいと考えています。

この状況での JCR クエリの書き方を教えてください。

編集 No.1

Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

// Obtain the query manager for the session via the workspace ...
QueryManager queryManager = session.getWorkspace().getQueryManager();    
// Create a query object ...

String expression = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/pending])";
Query query = queryManager.createQuery(expression, javax.jcr.query.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();

しかし、ルートノードに存在する順序とは異なる順序を与えます。しかし、それはソート形式ではありません。

編集 No.2

これで、この関数の機能が得られました。そして、今はうまくいっています。私が得たのは、この関数の2番目のパラメーターで言及されている宛先ノードのすぐ上のノードを注文することです。

しかし、来るノードは異なる名前 (数字) です。では、を使用してこれをどのように並べ替えることができますかorderBefore。毎回、このノードを配置する必要がある正しい場所 (宛先の相対パス) を知ることができないためです。

4

1 に答える 1

1

次のような構造がある場合、おそらくクエリは必要ありません。

/pending/1
/pending/2
...
/pending/999

NodeIterator を返す JCR Node の getNodes() メソッドを使用してノードを反復するだけです。

「保留中」の sling:orderedFolder ノードタイプは、子ノードの予測可能な順序を示します。

一般に、JCR ではクエリの代わりにツリー構造を使用する方が効率的です。

同じ親ノードに約 10,000 を超える子ノードを持つ Jackrabbit を使用している場合、パフォーマンスの問題が発生する可能性があることにも注意してください。

于 2013-05-31T08:37:29.357 に答える