docs: @Override
  	public Long nextValue(NextValueRequest request) {
  		Transaction tx = neo4jDb.beginTx();
  		Lock lock = null;
  		try {
  			Node sequence = getSequence( request.getKey() );
  
  			if ( sequence == null ) {
  				// sequence nodes are expected to have been created up-front
  				if ( request.getKey().getMetadata().getType() == IdSourceType.SEQUENCE ) {
  					throw logger.sequenceNotFound( sequenceName( request.getKey() ) );
  				}
  				// table sequence nodes (think of them as rows in a generator table) are created upon first usage
  				else {
  					addTableSequence( request );
  					sequence = getSequence( request.getKey() );
  				}
  			}
  
  			lock = tx.acquireWriteLock( sequence );
  			long nextValue = updateSequenceValue( request.getKey(), sequence, request.getIncrement() );
  			tx.success();
  			lock.release();
  			return nextValue;
  		}
  		finally {
  			tx.close();
  		}
  	}