0

我正在尝试将一个节点及其子节点移动到 JCR 存储库中的另一个节点,但我不断收到此错误:

在工作区“默认”中找不到节点“/A/B[2]”允许同名同级的节点定义。

如果我理解正确,它试图告诉我我正在尝试在目标路径中创建一个节点,其 ID 已经存在于那里。但事实并非如此!

我的结构由两个父母组成,每个父母都有一个孩子:

A --> B

C --> D

我正在尝试将 D 移至 B,因此之后的结构将是:

A --> B --> D

C

这是我的代码,我希望路径设置正确:

private void moveNode(final Node movedNode, final Node destinationNode) 
    throws RepositoryException {
        System.out.println(movedNode.getPath()); // prints "/C/D"
        System.out.println(destinationNode.getPath()); // prints "/A/B"
        modeshape.execute(new JcrHandler<Object>() {
            @Override
            public Object execute(Session session) throws RepositoryException {
                session.move(movedNode.getPath(), destinationNode.getPath());
                return null;
            }

        });
}

谢谢你的建议!

4

1 回答 1

3

当然路径不正确!愚蠢的我!

改变路径解决了这个问题:

session.move(movedNode.getPath(), destinationNode.getPath()+"/"+movedNode.getName());

我需要更仔细地阅读文档:

提供的 destAbsPath 在其最终元素上不得有索引。如果是这样,则立即抛出 RepositoryException。严格来说,destAbsPath 参数实际上是新位置的父节点的绝对路径,并附加了移动节点所需的新名称。

来源:http ://www.day.com/specs/jcr/1.0/7.1.7_Moving_and_Copying.html

于 2013-10-30T08:10:02.753 回答