Bonjour,
Si tu as bien configuré le mapping des deux classes, tu peux faire comme suit:
List<Object[]> listTable1_2 = entityManagerFactory.createQuery("select t1,t2 FROM Table1 t1 join t1.table2 t2").getResultList();
Pour la jointure, à toi de voir s'il s'agit d'un inner join ou left join.
Ce que tu faits n'est pas du sql mais du jpql (JPA).
En jqpl, il y a aussi le clause fetch pour la jointure qui te permet de charger directement les deux tables sans que d'autre requête sera exécuté lors de la lecture de l'attribut lié à la seconde table.
listTable1 = (List<Table1>) entityManagerFactory.createQuery("FROM Table1 t1 join fetch t1.t2", Table1.class).getResultList();
Dans ce cas, quand tu parcours la liste listTable1, tu peux directement avoir t2 sans qu'une requête à la base se fasse.
1 2 3
| for(Table1 t1 : listTable1){
Set<Table2> t2 = t1.getT2(); // Set ou List ou Collection, dépendant de ton mapping.
} |
Tout cela n'est valable que si tu as bien configuré tes mapping.
Utilise un nom de variable qui correspond au type de l'objet. entityManagerFactory doit être un EntityManager donc entityManager doit être plus approprié. Sinon ça donne confusion.
A+.
Partager