public function delete() {
		
		if(null === $this -> getAdapter()) {
			return trigger_error('Adapter is not set. Set the adapter with the setAdapter() method', E_USER_ERROR);
		}

		//Execute user defined before deleting function
		$this -> beforeDelete();

		$class  	 = new \ReflectionClass(get_class($this));
		$identifiers = $this -> getIdentifier();	
		$values  	 = $this -> toArray();
		$ids 		 = [];
		$escape 	 = [];
		
		if(0 === count($identifiers)) {
			return trigger_error(sprintf('Identifier is NULL. Can not delete entity without a valid value as identifier in %s', $class -> getFileName()), E_USER_ERROR);
		}

		foreach($identifiers as $identifier) {
			
			$ids[] = sprintf('%s = ?', $this -> getAdapter() -> escape($identifier));

			if(true === isset($values[$identifier])) {
				$escape[] = $values[$identifier];
			}
			else {
				$escape[] = null;
			}
		}

		$query = sprintf('DELETE FROM %s WHERE %s LIMIT 1', $this -> getAdapter() -> escape($this -> getTable()), implode($ids, ' AND '));

		$this -> getAdapter() -> query($query, $escape);

		$success = $this -> getAdapter() -> execute();

		//Execute user defined after deleting function
		$this -> afterDelete();

		return $success;
	}