@Override
	public Object _save(Object o) {
		if (null == o) {
			System.err.println("Warning, object to save is a nullptr");
			return null;
		}
		Connection connection = createConnectionObject();
		
		try {
			checkAndSyncSchema(o.getClass(), connection);
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
		// Check if PK exists
		Field pkField = getPrimaryKey(o);
		Object pkObj = getPrimaryKeyObj(pkField,o);
		if (pkObj != null) {
			// PK exists: make upsert
			Map<String, Object> whereClause = new HashMap<>();
			whereClause.put(getPrimaryKey(o).getName(), pkObj);
			// Check if the object exists in database
			List<Object> rid = makeSelect(o.getClass(), new String[] { pkField
					.getName().toString() }, whereClause, new String[] {}, 1,
					0, connection);
			if (rid.size() != 0) {
				// Object already exists: UPDATE
				return makeUpdate(o, connection);
			} else {
				// Object doesn't exists: INSERT
				return makeInsert(o, connection);
			}

		} else {
			// PK doesn't exists, make directly an insert
			return makeInsert(o, connection);
		}
	}