IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des donn�es Java Discussion :

Spring : manyToMany qui r�cup�re les donn�es mapp�es de fa�on incompl�te


Sujet :

Persistance des donn�es Java

  1. #1
    Membre habitu�
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    D�cembre 2022
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : D�cembre 2022
    Messages : 10
    Par d�faut Spring : manyToMany qui r�cup�re les donn�es mapp�es de fa�on incompl�te
    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 !

  2. #2
    Membre chevronn�
    Homme Profil pro
    Ing�nieur en g�nie logiciel
    Inscrit en
    Juin 2012
    Messages
    948
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : Ing�nieur en g�nie logiciel
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Juin 2012
    Messages : 948

  3. #3
    Membre habitu�
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    D�cembre 2022
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : D�cembre 2022
    Messages : 10
    Par d�faut
    j'ai fait comme le site mais je r�cup�re toujours que quelques fonctionnalit�s dans les profils

    Profil
    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
     
        @ManyToMany(cascade =  {
                CascadeType.ALL,
            }, fetch = FetchType.EAGER)
        @JoinTable(
                name = "t_profil_fonctionnalite",
                joinColumns = { @JoinColumn(name = "profil_id") },
                inverseJoinColumns = { @JoinColumn(name = "fonctionnalite_id") }
        )
        public Set<Fonctionnalite> fonctionnalites  = new HashSet(); 
     
        public void addFonctionnalite(Fonctionnalite fonctionnalite) {
            this.fonctionnalites.add(fonctionnalite);
            fonctionnalite.getProfils().add(this);
       }
     
       public void removeFonctionnalite(long fonctionnaliteId) {
    	    Fonctionnalite fonctionnalite = this.fonctionnalites.stream().filter(t -> t.getId() == fonctionnaliteId).findFirst().orElse(null);
    	    if (fonctionnalite != null) {
    	        this.fonctionnalites.remove(fonctionnalite);
       	        fonctionnalite.getProfils().remove(this);
                }
       }

    controller
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
        	List<Profil> profils = new ArrayList<Profil>();
        	profilDao.findAll().forEach(profils::add);
            return new ResponseEntity<>(profils, HttpStatus.OK);

    �a fait 1 semaine que je cherche

  4. #4
    Membre chevronn�
    Homme Profil pro
    Ing�nieur en g�nie logiciel
    Inscrit en
    Juin 2012
    Messages
    948
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : Ing�nieur en g�nie logiciel
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Juin 2012
    Messages : 948
    Par d�faut
    enl�ve @EqualsAndHashCode

  5. #5
    Membre habitu�
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    D�cembre 2022
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : D�cembre 2022
    Messages : 10
    Par d�faut
    merci, tu me sauve la life.
    c'etait bien �a !

  6. #6
    Membre chevronn�
    Homme Profil pro
    Ing�nieur en g�nie logiciel
    Inscrit en
    Juin 2012
    Messages
    948
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : Ing�nieur en g�nie logiciel
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Juin 2012
    Messages : 948
    Par d�faut
    en fait par d�faut avec l'annotation il doit utiliser tous les champs de la classe... or il faudrait plut�t sp�cifier que l'id

  7. #7
    Membre extr�mement actif
    Avatar de dukoid
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par d�faut
    merci pour la pr�cision !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 26/10/2009, 22h18
  2. formulaire qui transforme les donn�es!
    Par xave dans le forum Langage
    R�ponses: 11
    Dernier message: 03/07/2006, 11h58
  3. R�ponses: 2
    Dernier message: 31/05/2006, 09h58
  4. Requ�te qui r�cup�re les droits d'un utilisateur
    Par peck dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 20/04/2006, 09h40
  5. R�ponses: 6
    Dernier message: 12/04/2006, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo