0

JCR には、真夜中にバージョン管理されるノードがいくつかあります。もちろん、このノードが最後にバージョン管理されてから変更があった場合にのみ、新しいバージョンを作成する必要があります。すべてを取得せずにバージョン管理されていない変更を含むすべてのノードを取得し、それらを繰り返し、最後の変更のタイムスタンプを最新バージョンと比較する方法はありますか?

4

1 に答える 1

1

JCR 2.0 には組み込みの標準 mixin が含まれており、mix:lastModified次のように定義されています。

[mix:lastModified] mixin 
  - jcr:lastModified (date) 
  - jcr:lastModifiedBy (string)

これを使用するには、 を使用して mixin としてノードに追加するNode.addMixin("mix:lastModified")か、カスタム ノード タイプを使用している場合は、カスタム ノード タイプを変更して拡張します。これらのノードのいずれかを変更すると、ModeShape は保存時に 2 つのプロパティを自動的に更新します。(とプロパティmix:createdを持ち、同様の方法で動作するビルトインもあります。)jcr:createdjcr:createdBy

しばらくしてから変更されたすべてのノードを見つけるには、次のクエリを発行します。

SELECT [jcr:path]
FROM [mix:lastModified] AS node
WHERE [jcr:lastModified] >= CAST('2014-06-01T11:00:00.000' AS DATE)

パス以外のものが必要な場合は、インスタンスを使用QueryResult.getNodes()して反復処理するのが最も簡単な場合があります ( .NodegetRows()

この最後のクエリは、タイプに関係なくすべてのノードを検索するため、mixinとして追加され、ある日付以降に一部のプロパティが変更された特定のタイプ (例: acme:dataNode)のすべてのノードを検索する場合は、結合を使用する必要があります。 :mix:lastModified

SELECT modified.[jcr:path], myNode.[acme:myDataProperty]
FROM [acme:dataNode] AS myNode
JOIN [mix:lastModified] AS modified ON ISSAMENODE(myNode,modified)
WHERE modified.[jcr:lastModified] >= CAST('2014-06-01T11:00:00.000' AS DATE)

一方、カスタム ノード タイプがmix:lastModified次のように拡張されている場合:

[acme:customType] > mix:lastModified, mix:versionable
  - acme:customProperty (string)

次に、クエリを少し単純にして、そのノード タイプから選択することができます (結合なし)。

SELECT [jcr:path], [acme:customProperty]
FROM [amce:customType] AS node
WHERE [jcr:lastModified] >= CAST('2014-06-01T11:00:00.000' AS DATE)

結局のところ、mix:lastModifiedプロパティはカスタム タイプで表示されるため、acme:customTypeノード タイプで表示されます。

于 2014-06-02T13:38:46.303 に答える