protected function recursiveJointures(\Asgard\Db\DAL $dal, $jointures, \Asgard\Entity\Definition $definition, $table) {
		$alias = null;
		if(is_array($jointures)) {
			foreach($jointures as $relation=>$v) {
				#jointure type
				if(preg_match('/^[^ ]+join /', $relation, $matches)) {
					$type = trim($matches[0]);
					$relation = preg_replace('/^[^ ]* /', '', $relation);
				}
				else
					$type = 'leftjoin';
				if(!is_numeric($relation)) {
					$relationName = $relation;
					if(strpos($relationName, ' '))
						list($relationName, $alias) = explode(' ', $relationName);
					else
						$alias = null;
					$relation = $this->dataMapper->relation($definition, $relationName);
					$this->jointure($dal, $relation, $alias, $table, $type);

					$tableAlias = $alias ? $alias:$relationName;

					$this->recursiveJointures($dal, $v, $relation->getTargetDefinition(), $tableAlias);
				}
				else
					$this->recursiveJointures($dal, $v, $definition, $table);
			}
		}
		else {
			$relation = $jointures;
			#jointure type
			if(preg_match('/^[^ ]+join /', $relation, $matches)) {
				$type = trim($matches[0]);
				$relation = preg_replace('/^[^ ]* /', '', $relation);
			}
			else
				$type = 'leftjoin';
			if(strpos($relation, ' '))
				list($relation, $alias) = explode(' ', $relation);
			$relation = $this->dataMapper->relation($definition, $relation);
			$this->jointure($dal, $relation, $alias, $table, $type);
		}
	}