code: public boolean save() {
          if(frozen) throw new FrozenException(this);
  
          fireBeforeSave();
  
          validate();
          if (hasErrors()) {
              return false;
          }
  
          boolean result;
          if (getId() == null && !compositeKeyPersisted) {
              result = insert();
          } else {
              result = update();
          }
          fireAfterSave();
          return result;
      }
docs: This method will save data from this instance to a corresponding table in the DB.
  It will generate insert SQL if the model is new, or update if the model exists in the DB.
  This method will execute all associated validations and if those validations generate errors,
  these errors are attached to this instance. Errors are available by {#link #errors() } method.
  The <code>save()</code> method is mostly for web applications, where code like this is written:
  <pre>
  if(person.save())
  //show page success
  else{
  request.setAttribute("errors", person.errors());
  //show errors page, or same page so that user can correct errors.
  }
  </pre>
  
  In other words, this method will not throw validation exceptions. However, if there is a problem in the DB, then
  there can be a runtime exception thrown.
  
  @return true if a model was saved and false if values did not pass validations and the record was not saved.
  False will also be returned if you set an ID value for the model, but such ID does not exist in DB.