首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JCR -ModeShape :创建唯一的节点名

JCR -ModeShape :创建唯一的节点名
EN

Stack Overflow用户
提问于 2013-09-30 03:27:58
回答 2查看 1.8K关注 0票数 0

我需要在节点文件夹中添加一些节点文件。但也许其中有些人的名字是一样的。就像这样:

附加文件名1

附加文件名2

附加文件名1

我希望有一个唯一的ID (主键)而不是文件名,因为我在另一个节点中使用这个路径。有没有办法在JCR中创建类似自动生成的ID?还是我得用实用主义来解决它?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-30 05:23:13

JCR对于同名子节点的标准方法是使用同名兄弟姐妹或SNS (参见这里这里)。但是,通常不鼓励使用它们,因为当移动、重命名、插入和删除节点的子节点时,给定子节点的同名同级索引(以及路径)可能会发生变化。

JCR2.0API也没有定义自动生成唯一子节点名称的方法。(JSR-333或“JCR2.1”)即将最终采用,并将以自动化的方式添加具有唯一名称的子节点。ModeShape计划在4.0中支持JSR-333;查看我们的路线图以获得时间表。)

因此,考虑到这一点,有两种方法可以完成所要求的任务,这两种技术在ModeShape集群中都能很好地工作。

生成您自己的唯一名称

标准的nt:folder节点类型不允许而不是允许同名兄弟姐妹的子节点。毕竟,设计成像大多数文件系统一样的nt:foldernt:file不允许同名的文件/文件夹。因此,当您创建一个具有主要nt:folder类型的节点时,每个子节点都必须有一个唯一的名称。

为子类创建唯一名称的一种非常简单的方法是使用标准的java.util.UUID类。只需生成一个唯一的ID,并在新的子名称中使用字符串形式。

使用同名兄弟姐妹(SNS)

或者,如果您希望存储库通过SNS索引来管理子节点名称的唯一性,并且能够忍受SNS节点的缺点,那么只需定义一个自定义节点类型就可以了。例如,这里有一个节点类型定义,它的子类型为nt:hierarchyNode (它是nt:foldernt:file的超级类型),因此类似于nt:folder,但与nt:folder无关。

代码语言:javascript
运行
AI代码解释
复制
[acme:folder] > nt:hierarchyNode 
+ * (nt:hierarchyNode) version sns

(扩展nt:hierarchyNode不需要定制节点类型,但这样做可以使nt:folder包含nt:filent:folderacme:folder类型的节点。)

注册此节点类型定义后,只需创建具有该自定义类型的文件夹节点作为它们的主要类型(或者在ModeShape支持的之后更改主类型)。

票数 3
EN

Stack Overflow用户

发布于 2015-11-29 22:00:31

通过使用JcrUtils,您可以为节点指定您的名称提示,即您的"fileName“,JcrUtil会将一个数字预先追加到该节点上,从而产生类似"fileName0”的内容,下面将按照您的要求进行如下操作:

代码语言:javascript
运行
AI代码解释
复制
JcrUtils.getOrCreateUniqueByPath(attach, "fileName", "type goes here");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19093074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档