Spring boot 2.5.6


(1) méthode 1

Profil.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(); 
}
```
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
```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 :
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
```
controller
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 :
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": []        
    },
...
...
```
les fonctionnalités des profils sont soit incomplète, soit manquante!

(2)
mis le fetch.eager sur Profil

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 fonctionnalités des profils sont soit incomplète, soit manquante!


** les résultats sont différents entre (1) et (2) mais toujours fausses !