Ok i solved
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Admin\Entity\SkillsExperience', 'ske');
$rsm->addFieldResult('ske', 'id', 'id');
$rsm->addFieldResult('ske', 'idExperience', 'id_experience');
$rsm->addJoinedEntityResult('Admin\Entity\SkillsDetails' , 'skd', 'ske', 'idSkillsDetails');
$rsm->addFieldResult('skd', 'idx', 'id');
$rsm->addFieldResult('skd', 'description', 'description');
$rsm->addJoinedEntityResult('Admin\Entity\Skills' , 'sk', 'skd', 'idSkill');
$rsm->addFieldResult('sk','idx2','id');
$sql = <<<EOT
SELECT
ske.id,
ske.id_experience,
skd.id as idx,
skd.description,
skd.id_skill,
sk.id as idx2
FROM skills_experience ske
LEFT JOIN skills_details skd
ON skd.id = ske.id_skills_details
LEFT JOIN skills sk
ON sk.id = skd.id_skill
WHERE id_experience = ?
ORDER BY sk.id
EOT;
$query = $this->em->createNativeQuery($sql,$rsm);
$query->setParameter(1,$id_experience);
$array = $query->getResult();
First of all it should be noted that when there are fields that have the same name in different tables, you must assign aliases.
When you add a join to the native query, you must use the following method
addJoinedEntityResult
There are 4 parameters
1) The class / entity on which the join is performed
2) The alias of the table on which the join is used in the query
3) The alias of the parent table used in the query
4) The field of the parent entity connected to the daughter (in my case idSkillsDetails to join the first and the second idSkill to join)
You must not, in the method for classes addFieldResult fathers, the field used to make the join
I hope it will be useful to others.