JCR には、真夜中にバージョン管理されるノードがいくつかあります。もちろん、このノードが最後にバージョン管理されてから変更があった場合にのみ、新しいバージョンを作成する必要があります。すべてを取得せずにバージョン管理されていない変更を含むすべてのノードを取得し、それらを繰り返し、最後の変更のタイムスタンプを最新バージョンと比較する方法はありますか?
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:created
jcr:createdBy
しばらくしてから変更されたすべてのノードを見つけるには、次のクエリを発行します。
SELECT [jcr:path]
FROM [mix:lastModified] AS node
WHERE [jcr:lastModified] >= CAST('2014-06-01T11:00:00.000' AS DATE)
パス以外のものが必要な場合は、インスタンスを使用QueryResult.getNodes()
して反復処理するのが最も簡単な場合があります ( .Node
getRows()
この最後のクエリは、タイプに関係なくすべてのノードを検索するため、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
ノード タイプで表示されます。