# Java > Gnral Java > Persistance des donnes >  comment effectues des requetes dans une table d'association avec hibernate ou spring data

## Bertholds

Bonsoir a tous je travaille sur un projet javaFX tout en utilisant Spring data, hibernate...Mon soucis est le suivant:
j'ai deux classes Matiere et classe tout deux lis par une association du type ManyToMany donnant lieu a une classe d'association appel matiere_classe.
Premierement, En plus des cls etrangere que recois matiere_classe j'aimerai lui ajouter un autre attribut nom coefficient.
deuxiemement j'aimerai effectuer des requetes dans cette table d'association a partir de hibernate ou spring data mais je ne sais comment proced puisque je n'est pas d'entit representant cette table d'association.
voici la structure de mes classes

pour la classe Matiere


```

```

classe Classe:


```

```

Voici le contenu de la table d'association. par exemple comment recuper toutes les matieres qui ont pour id_classe 2

----------


## Invit

Salut
si ton niveau en jpql ne te permet pas encore de faire les bonnes requtes, alors au moins avec la visualisation du schma gnr tu as une ide des requtes en sql natif  passer pour rcuprer les donnes que tu veux.
Donc il y a trois solution:
une requte native
une requte jpql traditionnel
une requte criteria
ntant pas un grand fan des requte join letf outer etc. Et n'ayant pas ton modle de donnes avec un jeu de donnes pour ttonner afin de trouver la bonne requte jpql.
Je t'oriente vers la query native qui souffre de ne pas tre portable d'un fournisseur de  base de donnes  l'autre

Voici ma proposition, une bonne vielle requte imbriqu de sql92 avec du spring data


```

```

----------


## PhilippeGibault

Quelques remarques pour commencer:

JPA/Hibernate est un trs bon (voir excellent) framework.
Nanmoins, il exige un vritable investissement de la part du dveloppeur.

C'est pour a que je recommande d'annoter les classes en tant le plus exhaustif possible et le plus exigent possible.
Il manque beaucoup d'annotations (@Column par exemple).

Enfin, il faut utiliser les conventions Java.
La BDD, c'est la BDD, les classes Java, c'est les classes Java et a suit les conventions Java.

Au lieu de:


```

```

Il faut  minima:


```

```

Ensuite, lors de relation etre entit (@ManyToOne, @OneToMany, @ManyToMany), il faut faire attention au "EAGER" et au "LAZY", selon les besoins.
C'est une question cl, notament en ce qui concerne la performance.

Si c'est Eager, lorsque Hibernate/JPA va charger ton objet, il va charger tous les objets EAGER lis, et faire les requtes ncessaires.
Sinon, il ne va pas charger (mais si on charge cette liste, on a une exception ensuite).

Pour raison dfensive, je conseille le LAZY.

Enfin, on utilise plutt des Set que des List, car on veut l'lment une seule foi.


Cas LAZY:


```

```

Cas EAGER:


```

```

JPQL (Cas LAZY):


```

```

Le mot cl fetch permet de spcifier explicitement que l'on va se mettre en mode EAGER.

JPQL (Cas EAGER):


```

```

Pour passer le paramtre:


```

```

Cordialement.

----------

