我需要在节点文件夹中添加一些节点文件。但也许其中有些人的名字是一样的。就像这样:
附加文件名1
附加文件名2
附加文件名1
我希望有一个唯一的ID (主键)而不是文件名,因为我在另一个节点中使用这个路径。有没有办法在JCR中创建类似自动生成的ID?还是我得用实用主义来解决它?
提前感谢
发布于 2013-09-30 05:23:13
JCR对于同名子节点的标准方法是使用同名兄弟姐妹或SNS (参见这里和这里)。但是,通常不鼓励使用它们,因为当移动、重命名、插入和删除节点的子节点时,给定子节点的同名同级索引(以及路径)可能会发生变化。
JCR2.0API也没有定义自动生成唯一子节点名称的方法。(JSR-333或“JCR2.1”)即将最终采用,并将以自动化的方式添加具有唯一名称的子节点。ModeShape计划在4.0中支持JSR-333;查看我们的路线图以获得时间表。)
因此,考虑到这一点,有两种方法可以完成所要求的任务,这两种技术在ModeShape集群中都能很好地工作。
生成您自己的唯一名称
标准的nt:folder
节点类型不允许而不是允许同名兄弟姐妹的子节点。毕竟,设计成像大多数文件系统一样的nt:folder
和nt:file
不允许同名的文件/文件夹。因此,当您创建一个具有主要nt:folder
类型的节点时,每个子节点都必须有一个唯一的名称。
为子类创建唯一名称的一种非常简单的方法是使用标准的java.util.UUID
类。只需生成一个唯一的ID,并在新的子名称中使用字符串形式。
使用同名兄弟姐妹(SNS)
或者,如果您希望存储库通过SNS索引来管理子节点名称的唯一性,并且能够忍受SNS节点的缺点,那么只需定义一个自定义节点类型就可以了。例如,这里有一个节点类型定义,它的子类型为nt:hierarchyNode
(它是nt:folder
和nt:file
的超级类型),因此类似于nt:folder
,但与nt:folder
无关。
[acme:folder] > nt:hierarchyNode
+ * (nt:hierarchyNode) version sns
(扩展nt:hierarchyNode
不需要定制节点类型,但这样做可以使nt:folder
包含nt:file
、nt:folder
和acme:folder
类型的节点。)
注册此节点类型定义后,只需创建具有该自定义类型的文件夹节点作为它们的主要类型(或者在ModeShape支持的之后更改主类型)。
发布于 2015-11-29 22:00:31
通过使用JcrUtils,您可以为节点指定您的名称提示,即您的"fileName“,JcrUtil会将一个数字预先追加到该节点上,从而产生类似"fileName0”的内容,下面将按照您的要求进行如下操作:
JcrUtils.getOrCreateUniqueByPath(attach, "fileName", "type goes here");
https://stackoverflow.com/questions/19093074
复制