Spring boot 2.5.6
(1) méthode 1
Profil.java
Fonctionnalite.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 ```java @Getter @Setter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode @FieldDefaults(level = AccessLevel.PRIVATE) @Table(name = "t_profil") public class Profil { ... ... @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY) @JoinTable( name = "t_profils_fonctionnalites", joinColumns = { @JoinColumn(name = "profil_id") }, inverseJoinColumns = { @JoinColumn(name = "fonctionnalite_id") } ) public Set<Fonctionnalite> fonctionnalites = new HashSet(); } ```
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ```java @jakarta.persistence.Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode @FieldDefaults(level = AccessLevel.PRIVATE) @Table(name = "t_fonctionnalite") public class Fonctionnalite { ... ... @ManyToMany(mappedBy = "fonctionnalites", fetch = FetchType.LAZY) private Set<Profil> profils = new HashSet(); ```
j'ai vérifié plusieurs fois, les insertions sont correctes :
controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ``` profil fonctionnalite 1 1 1 2 2 1 2 4 ```
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ```java ... List<Profil> profilList= profilDao.findAll(); profilList.forEach(profil -> { profil.getFonctionnalites(); }); // je fais appel à getFonctionnalites(); pour le LAZY return new ResponseEntity<>(profilList, HttpStatus.OK); ```
j'obtiens ces données :
les fonctionnalités des profils sont soit incomplète, soit manquante!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 ``` [ { "id": 1, "code": "CODEP1", "label": "defaut", "description": "defaut description1", "fonctionnalites": [ { "id": 1, "code": "codeF1", "label": "labelF1", "description": "descriptionF1", "profils": [] } ] }, { "id": 2, "code": "CODEP2", "label": "label2", "description": "description2", "fonctionnalites": [] }, ... ... ```
(2)
mis le fetch.eager sur Profil
les fonctionnalités des profils sont soit incomplète, soit manquante!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ``` @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER) @JoinTable( ```
** les résultats sont différents entre (1) et (2) mais toujours fausses !
Partager