I fear this is propagating the same kind of assumption/inflexibility that exists with previous versions of CakePHP. Would be more flexible as:

        $id = $this->_newId();
        ...    

    protected function _newId() {
        $field = $this->primaryKey(); // fields?
        if (!$field) {
            return;
        }

         $typeName = $this->schema()->columnType($fields);
         return Type::build($typeName)->newId();
    }

Or something similar. I.e. the table asks the schema what to do for a new id, but not directly in the _insert method. This makes it easier to override if necessary without lying about the database schema to in effect indirectly change this behavior.