あなたが望むことをするための標準的な方法はありません。JCR API では、任意のオブジェクト値を保存することはできません。JCR 1.0 で有効なプロパティ タイプは次のとおりです。
STRING
BINARY
LONG
DOUBLE
DATE
BOOLEAN
NAME
PATH
REFERENCE
これらのプロパティ タイプはすべて JCR 2.0 で有効ですが、新しいタイプがいくつかあります。
WEAKREFERENCE
URI
DECIMAL
さらに、 には任意の からjavax.jcr.ValueFactory
を作成するメソッドがありません。Value
java.lang.Object
次の 3 つのオプションがあります。
- STRING プロパティ タイプを使用し、'toString()' を使用して列挙値を文字列に変換します。また
- LONG プロパティ タイプを使用し、' ordinal() 'を使用して列挙値を整数値に変換し、long としてキャストします。また
- BINARY プロパティ タイプを使用し、列挙値を BINARY 値に変換します
IMO、オプション 1 が最も理にかなっています。状況によっては、オプション 2 の方が適している場合があります。たとえば、JCR-SQL および JCR-SQL2 のプロパティで比較演算子を使用できます。オプション 3 は機能しますが、あまり実用的ではありません。
オプション 1 と 2 では、ノード タイプの制約も利用できます。ご存知かもしれませんが、ノード タイプ定義には、そのノード タイプで許可されているプロパティ定義と子ノード定義が含まれており、いずれのプロパティ定義も、制約を使用して許可された値を指定できます。制約は、たとえば、ワイルドカード パターンまたはリテラル値 (STRING および PATH プロパティの場合)、値の範囲 (LONG、DOUBLE、および DATE プロパティの場合)、長さの範囲 (BINARY の場合)、ノード タイプの要件 ( REFERENCE および WEAKREFERENCE プロパティ)、リテラル (NAME プロパティ用)。制約によって許可されている限り、値は有効であると見なされることに注意してください。
したがって、オプション 1 または 2 では、列挙型を記述するプロパティ定義で制約を使用して、許容される値を制限できます。オプション 1 の場合、列挙型の STRING リテラル値によって、プロパティに設定できる値が制限されます。JCR 2.0 の CND 表記を使用した簡単な例を次に示します。
[ex:foo] mixin
- ex:bar (STRING) < 'VALUE1','VALUE2','VALUE3'
オプション 2 では、許容可能な LONG 値を持つ範囲 (または範囲のセット) が機能します。簡単な例を次に示します。
[ex:foo] mixin
- ex:bar (STRING) < [0,3)