jackrabbit java_java – 自定义JCR(Jackrabbit)节点属性类型

我想在长耳兔中使用枚举常量作为属性值.

但是,Node.setProperty()只接受基本类型,String和Value作为属性值类型.

我查看了ValueFactory界面,但这似乎也无法帮助我.

换句话说,我想这样做:

node.setProperty("name", Enum.Const);

而不是这个:

node.setProperty("name", Enum.Const.toString());

提前致谢.

解决方法:

没有标准的方法来做你想要的. JCR API根本不允许存储任意Object值. JCR 1.0中唯一有效的属性类型是:

> STRING

>二进制

>长

>双倍

>日期

>布尔兰

> NAME

>路径

>参考

所有这些属性类型在JCR 2.0中都有效,但有几个新属性:

>弱势

> URI

> DECIMAL

另外,javax.jcr.ValueFactory没有从任意java.lang.Object创建Value的方法.

有三种选择:

>使用STRING属性类型并使用’toString()’将枚举值转换为String;要么

>使用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)

标签:jcr,jackrabbit,java

来源: https://codeday.me/bug/20190723/1517918.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值