2016-07-18 36 views
1

我想删除一个节点,我用jackrabbit保存但我得到这个错误。无法删除一个节点在jackrabbit

Failed to delete file 
! javax.jcr.nodetype.ConstraintViolationException: Unable to perform operation. Node is protected. 

这里是代码,我已经习惯了保存:

  session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 

      Node parent = (Node) itemAtPath(parentPath, session); 
      Node newNode = parent.addNode(nodeName); 
      newNode.addMixin("mix:versionable"); 
      session.save(); // Create Root Node 

      VersionableChanges changes = new VersionableChanges(newNode.getSession()); 
      changes.checkout(newNode); 

      Binary binary = session.getValueFactory().createBinary(in); 
      newNode.setProperty(PROPERTY_DATA, binary); 
      newNode.setProperty(PROPERTY_NAME, fileName + System.currentTimeMillis()); 
      newNode.setProperty(PROPERTY_CREATEDBY, createdBy); 
      newNode.setProperty(PROPERTY_CREATEDDATE, createdDate); 
      newNode.setProperty(PROPERTY_COMMENT, comment); 
      Value value = session.getValueFactory().createValue(binary); 
      changes.checkin(); 
      session.save(); 

这里是我使用的删除代码:

  session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 
      Version fileVersion = null; 
      Node fileNode = null; 

      if (version != null && !version.isEmpty()) { 
       fileVersion = session.getWorkspace().getVersionManager().getVersionHistory(path).getVersion(version); 
      } else { 
       fileVersion = session.getWorkspace().getVersionManager().getBaseVersion(path); 
      } 

      fileNode = fileVersion.getFrozenNode(); 
      fileNode.remove(); 
      //need to save session to persist the remove operation 
      session.save();      

我如何克服这个问题?

回答

2

冻结的节点受到保护,因为删除它们会(可能)使版本存储处于损坏状态。为了从历史记录中删除“完整”版本,您必须这样:

VersionHistory history = session.getWorkspace().getVersionManager() 
          .getVersionHistory(info.getVersionedNodePath()); 
history.removeVersion(info.getVersionName()); 
session.save(); 
+0

代码正在删除完整版本。版本节点,冻结节点以及该版本的其他部分。我以为那是你想要做的。 –

+0

我试过'history.removeVersion(fileVersion.getName());'但现在我得到这个错误'无法删除文件 ! javax.jcr.ReferentialIntegrityException:无法删除版本。至少参考一次.' – amitection

+1

好的。我想这是因为你试图删除的版本是当前版本。您可能需要先删除原始节点,然后才能删除附加的版本节点。 –