protected void notifyModelListenersOnUpdate(TT targetModel) throws SQLException {

    Map<String, Object> originalValues = new HashMap<String, Object>();

    TT sourceModel = queryForId(extractId(targetModel));

    for (String syncNotificationFieldName :
        getSyncNotificationFieldNames(dataClass.getSimpleName())) {

      if (syncNotificationFieldName.equals("")) {
        continue;
      }

      if (syncNotificationFieldName.equals("uiEvent")) {
        if (targetModel.getUiEvent() != BaseModel.UI_EVENT_DEFAULT) {
          originalValues.put("uiEvent", null);
        }
      } else {
        FieldType fieldType = tableInfo.getFieldTypeByColumnName(syncNotificationFieldName);

        Object sourceFieldValue = fieldType.extractJavaFieldValue(sourceModel);
        Object targetFieldValue = fieldType.extractJavaFieldValue(targetModel);

        DataPersister dataPersister = fieldType.getDataPersister();

        if (!dataPersister.dataIsEqual(sourceFieldValue, targetFieldValue)) {

          originalValues.put(fieldType.getColumnName(), sourceFieldValue);
        }
      }
    }

    if (originalValues.isEmpty()) {
      return;
    }

    for (ModelListener<TT> modelListener : _modelListeners) {
      modelListener.onUpdate(targetModel, originalValues);
    }
  }