Sim*_*eon 3 java jackrabbit jcr
我想enum在长耳兔中使用常量作为属性值.但是,Node.setProperty()它只接受基本类型String和Value属性值类型.
我查看了ValueFactory界面,但这似乎也无法帮助我.
换句话说,我想这样做:
node.setProperty("name", Enum.Const);
Run Code Online (Sandbox Code Playgroud)
而不是这个:
node.setProperty("name", Enum.Const.toString());
Run Code Online (Sandbox Code Playgroud)
提前致谢.
没有标准的方法来做你想要的.JCR API根本不允许存储任意Object值.JCR 1.0中唯一有效的属性类型是:
STRINGBINARYLONGDOUBLEDATEBOOLEANNAMEPATHREFERENCE所有这些属性类型在JCR 2.0中都有效,但有几个新属性:
WEAKREFERENCEURIDECIMAL此外,javax.jcr.ValueFactory没有任何方法可以创建一个Value任意的java.lang.Object.
有三种选择:
IMO,选项1最有意义.在某些情况下,选项2可能更好 - 例如,它允许在JCR-SQL和JCR-SQL2中使用属性上的比较运算符.选项3可行,但它根本不太实用.
选项1和2也可以利用节点类型约束.正如你可能知道,节点类型定义包括由该节点类型所允许的属性定义和子节点的定义,任何定义的属性都可以使用约束指定的允许值.约束可以,例如,限制通过通配符模式或文字值(对于STRING和PATH属性),值的范围允许的属性值(LONG,DOUBLE,和日期属性),长度范围(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)
| 归档时间: |
|
| 查看次数: |
4142 次 |
| 最近记录: |