# Java > Gnral Java > Persistance des donnes >  [iBATIS] Relations entre objets

## Tourix

Bonjour  tous, 

Je dbut le dveloppement Web en java et pour cela j'utilise le framework Spring que j'ai appris grce aux articles de Serge Tah principalement. en ce qui concerne la gestion de la persistance, j'utilise iBATIS comme dans l'article par contre je me demande s'il est possible de grer les relations entre objets.

Je m'explique, supposons que j'ai un objet A:



```

```

et un objet B qui contient un objet A



```

```

dans ma base de donnes j'ai une table pour stocker les A [int(11) id, varchar(100) nom] et une autre pour stocker les B [int(11) id, varchar(100) nom, int(11) id_a].

est-il possible de faire un fichier de mapping qui va me grer tout seul la liaison? C'est-a-dire que quand je vais faire un select d'un objet B, il me cre et me lie l'objet A correspondant?

(J'espre tre clair  ::):  )

Merci d'avance

----------


## Tourix

Tant que j'y suis, je cherche mme  aller encore plus loin: que l'objet B contienne une collection d'objets A:



```

```

Je crois que pour un seul c'est possible (comme pour mon message prcdent) mais pour a je n'ai (encore) rien trouv

----------


## Tourix

C'est bon j'ai trouv. Pour ceux que a intresse, la rponse se trouve dans le Developper Guide:

Exemple:



```

```

----------


## BizuR

En effet, iBATIS est un outil de mapping O/R externalisant la couche SQL principalement (et mappant les objets avec ses fichiers de config). Il n'apporte pas autant de fonctionnalits que ses concurrents Hibernate et JPOX, demande plus de developpement (il faut implmenter tous les DAO uns par uns pour la sauvegarde par exemple) mais reste plus souple puisqu'il se contente uniquement, comme je le disais, de mapper et dplacer les requetes SQL dans un fichier XML. 

Juste pour prvenir, si jamais tu viens  utiliser l'hritage, sache qu'iBATIS le gre mais que sa dernire doc (enfin celle que j'ai lue il y a 3 mois) ne l'voque pas. Pour une solution  ton problme "copie" la mthode .NET (la doc .NET en parle par contre) et adapte la  la DTD d'iBATIS pour java (quelques noms de tags qui changent  quelques lettres pres  :;): 

Petite info toutefois sur ta solution, ici tu envisages le lazy loading ou non ?!? Si tel est le ca,s tu vas surement tomber dans la problmatique du N+1 select, la dsocumentation traite galement de ce sujet ... lis le pour etre sur de ne pas limiter les performances de ton mapping (notamment en optimisant l'association avec chargements par lot ou direct).

Bon courage avec cet outil qui offre un bon nombre de possibilits  :;):

----------


## Tourix

Merci de ta rponse.

J'ai mis ici un exemple, seulement pas mon utilisation relle. J'utiliserai trs certainement le lazy loading mais pas seulement. Je m'en servirai uniquement pour les objets que je veux garder en cache, conformment  la doc. Celle que j'ai lue date de dbut Aot mais je n'ai rien vu  propos de l'hritage, ceci dit je n'ai pas tout tout lu en dtails et je crois (mais pas sr) que mon SGBD, MySQL, ne le supporte pas (dj qu'il ne semble pas supporter les foreign key..)

Concernant Hibernate par exemple, je sais qu'il es trs populaire et est certainement plus utilis qu'iBATIS mais j'ai choisi d'utiliser iBATIS un peu par hassard: en lisant les articles sur Spring de Serge Tah et je me suis dit pourquoi pas  :;): 

J'essaierai cependant certainement hibernate dans les mois  venir mais l j'apprends dj beaucoup de choses  la fois: je passe du PHP "simple" au Java EE avec l'utilisation de Spring dans une architecture 3tier. Mes neurones fument ^^

----------


## BizuR

Pas de souci  :;): 

Pour l'hritage, aucun SGBD*R* ne le supporte ... c'est justement pour cela qu'il existe des stratgie de mapping spcifique (tu peux te documenter de manire thorique sur le site d'Hibernate ou celui de JPOX au sujet de ces stratgies, il me semble qu'iBatis propose bien videmment les mmes .... donc ne t'en fais pas  ::D: )

Quelle version de MySQL utilises tu ?!? Si tu veux des foreign key, il faut employer des tables de type InnoDB. Les autres proposes par MySQL ne le gree pas en effet  :;):

----------


## Tourix

J'utilise la version 5.0.22 en local, sur le serveur de dploiement je ne sais pas encore quelle version il y aura. Mes tables utilisent bien le moteur InnoDB. Pour l'instant j'utilise phpMyAdmin pour l'admin de MySQL, comme je n'ai trouv aucune option pour les cls trangres, j'en ai dduit rapidement que MySQL ne les grait toujours pas  :;): 

EDIT: il s'agit de la version gratuite Community

----------


## BizuR

Les cls trangres sont donc prises en compte ... toutefois, phpmyadmin ne gre peut etre pas la fonctionnalit. En utilise MySQL Administrator, tu pourras les grer sans aucun problme  :;):  (tlchargeable gratuitement sur le site de MySQL)

----------


## Tourix

Je viens de le faire et c'est bien pratique, merci beaucoup pour ton aide, tu m'as bien avanc  ::):

----------

