# Java > Gnral Java > Persistance des donnes >  Java, DAO et Jointures entre tables

## johannsan

Bonjour.

Je me pose une question sur l'utilisation des DAO lorsqu'on souhaite faire des jointures entre deux tables.

Prenons l'exemple deux deux tables Pays et ville

En base : 



```

```

En Java :
objet Pays :


```

```

objet ville


```

```

objet PaysDAO :


```

```



```

```

Question 1/
Comment, avec le pattern DAO, pouvons nous faire une jointure entre la table VILLE et pays.
En effet, si on recherche toutes les villes, puis pour toutes les villes on fait un find(pays de la ville), cela fait perdre tout l'interet des jointures SQL car on va faire N+1 requetes au lieu d'une?

De mme, dans la classe villeDAO, nous ne somme pas sens avoir accs aux noms des champs de la classe paysDAO car ils sont privs. Faut-il alors mettre les diffrents champs des DAO en public? (afin d'viter de faire des get).
PS : aprs avoi lu la doc suivante : http://cyrille-herby.developpez.com/...tern-dao/#LIII, on remarque que les noms des champs et des tables ne sont pas en variable mais en dur (ce qui me parait pas trs propre), mais peut etre que je me trompe.

Question 2/
Dans l'exemple ci-dessus, le pays contient une liste de pays, mais la ville ne contient pas la rfrence au pays.
--> comment dcider si ces rfrences doivent tre dans les deux sens ou que dans un sens?
De mme, si on gre ces rfrences dans tous les sens, on voit bien qu' force de charger tous les objets qui sont lis, on peut aller trs loin (car chaque objet va charger son objet "voisin".
Comment expliciter en java qu'on ne doit pas charger tous les objets en cascade?
De mme si on dcide de ne pas les charger tous? comment savoir si on l'a charg ou pas (afin de le charger s'il ne l'est pas), et afficher une valeur null  tord...

Merci d'avance pour vos rponses

----------


## freddou17

> Question 1/
> Comment, avec le pattern DAO, pouvons nous faire une jointure entre la table VILLE et pays.
> En effet, si on recherche toutes les villes, puis pour toutes les villes on fait un find(pays de la ville), cela fait perdre tout l'interet des jointures SQL car on va faire N+1 requetes au lieu d'une?
> 
> Tu fais une requte (avec jointure bien sur) qui te remonte les champs que tu veux binder puis tu parcours ton resultSet pour crer tes objets. Dans ton cas tu es en SQL pur donc pas de surprise.
> 
> De mme, dans la classe villeDAO, nous ne somme pas sens avoir accs aux noms des champs de la classe paysDAO car ils sont privs...
> Pour moi ton objet ville doit contenir un objet pays => ville.getPays.getLibelle(). Aprs je ne suis pas sur d'avoir tout compris mais ton objet villeDAO te retourne des objets ville et idem pour pays. Et bien sur on utilise les getters et setters
> Je pense que tu veux confond les champs qui correspondent aux enttes de colonnes en BDD et les attributs respectifs des tes objets.
> ...


Je t'invite  te renseigner plus sur la persistance en JAVA. Pour ma part j'ai trs peu utiliser les DAOs sans fwk de persistance donc il y a surement des techniques qui permettent de faire du lazy ou autre sans utiliser de fwk :;): 
N'hsites  faire un projet test...

----------


## johannsan

En effet, je me suis orient sur hibernate, donc tout se fait tout seul...

----------

