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

Hibernate Java Discussion :

FetchType.LAZY et clés composites


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut FetchType.LAZY et clés composites
    Bonjour,

    soit deux entités Membre et Questionnaire en association ManyToMany porteuse d'information. J'ai donc une entité ListeQuestionnaire correspondant à la table intermédiaire entre les deux dont la clé primaire est une clé composite sur idMembre et idQuestionnaire.
    Dans Membre j'ai donc une liste de ListeQuestionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(mappedBy = "pk.membre", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
    private List<ListeQuestionnaire> listeQuestionnaires = new ArrayList<ListeQuestionnaire>();
    pareil dans Questionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(mappedBy = "pk.questionnaire", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    private List<ListeQuestionnaire> listeQuestionnaires = new ArrayList<ListeQuestionnaire>();
    La table ListeQuestionnaire est remplie par cascade via l'entité Questionnaire.
    Jusque là, pas de problème, tout fonctionne bien.

    Une fois que la table ListeQuestionnaire est remplie, normalement la liste de ListeQuestionnaire du Membre devrait se remplir lors d'un simple get sur cette propriété grâce au FetchType.LAZY, non?
    Le fait est que ça ne marche pas, mais je ne sais pas si c'est parce que j'ai mal compris la fonction du FetchType, ou si c'est un problème du à la clé composite de ListeQuestionnaire qui empêcherait le chargement de se faire correctement...
    Si quelqu'un pouvait éclairer ma lanterne, ça serait chouette

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    D'une manière générale, "ça ne marche pas" n'est pas très descriptif et aide peu à la résolution d'un problème

    Tu obtiens des listes vides, une exception, Obi-Wan Kenobi, la réponse D ?

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    j'obtiens un pancake dans la neige en fait

    Plus sérieusement, oui désolée c'était pas très explicite. J'obtiens une liste vide. La seule manière que j'ai trouvé pour récupérer mes données c'est de faire une requête explicite via un service. Mais c'est juste en attendant de comprendre pourquoi j'obtiens une liste vide via la méthode get normal...

    Je remarque aussi que j'avais pas mis la relation qui apparait dans ListeQuestionnaire :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    @Entity
    @AssociationOverrides({
    	@AssociationOverride(name = "pk.membre", joinColumns = @JoinColumn(name = "idMembre")),
    	@AssociationOverride(name = "pk.questionnaire", joinColumns = @JoinColumn(name = "idQuestionnaire"))
    })
    public class ListeQuestionnaire extends DomainObject {
     
    	private static final long serialVersionUID = 1L;
     
    	@EmbeddedId
    	private ListeQuestionnairePk pk;
     
    	private Boolean aRepondu;
     
    	public ListeQuestionnaire() {
    		pk = new ListeQuestionnairePk();
    	}
     
    	public ListeQuestionnairePk getPk() {
    		return pk;
    	}
     
    	public void setPk(ListeQuestionnairePk pk) {
    		this.pk = pk;
    	}
     
    	@Transient
    	public Membre getMembre() {
    		return getPk().getMembre();
    	}
     
    	public void setMembre(Membre membre) {
    		getPk().setMembre(membre);
    	}
     
    	@Transient
    	public Questionnaire getQuestionnaire() {
    		return getPk().getQuestionnaire();
    	}
     
    	public void setQuestionnaire(Questionnaire questionnaire) {
    		getPk().setQuestionnaire(questionnaire);
    	}
     
    	public Boolean getARepondu() {
    		return aRepondu;
    	}
     
    	public void setARepondu(Boolean repondu) {
    		aRepondu = repondu;
    	}
    }
    et la clé composite qui va avec :
    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
    28
    29
    30
    @Embeddable
    public class ListeQuestionnairePk implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	// Composante de la clé composite.
    	@ManyToOne(fetch = FetchType.LAZY)
    	private Membre membre;
    	@ManyToOne(fetch = FetchType.LAZY)
    	private Questionnaire questionnaire;
     
    	public ListeQuestionnairePk() {
    	}
     
    	public Membre getMembre() {
    		return membre;
    	}
     
    	public void setMembre(Membre membre) {
    		this.membre = membre;
    	}
     
    	public Questionnaire getQuestionnaire() {
    		return questionnaire;
    	}
     
    	public void setQuestionnaire(Questionnaire questionnaire) {
    		this.questionnaire = questionnaire;
    	}
    }

  4. #4
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    bon, je déduis du fait qu'il n'y a pas de réponse que ce que j'ai fait ne choque pas, et que donc j'avais bien compris le fonctionnement du FetchType.LAZY...

    Si quelqu'un qui passe par là sait comment le faire fonctionner avec des clés primaires composites, je suis preneuse

    PS : j'ai choppé dans ce tuto la manière d'implémenter une clé primaire composite.

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Rien qui me choque, mais j'ai pas vraiment eu le temps de regarder, en fait ~~

Discussions similaires

  1. [Data] type= FetchType.LAZY+Named query
    Par sarsar88 dans le forum Spring
    Réponses: 1
    Dernier message: 05/12/2012, 15h39
  2. JPA, EJB, FetchType.LAZY besoin de conseils.
    Par zoolonly dans le forum JPA
    Réponses: 1
    Dernier message: 11/07/2012, 14h02
  3. PK Clés composites remplacées par PK
    Par rgomes dans le forum DB2
    Réponses: 7
    Dernier message: 23/03/2012, 07h47
  4. annotations et clés composites
    Par BenHoit dans le forum Hibernate
    Réponses: 4
    Dernier message: 27/05/2011, 11h31
  5. clés composites
    Par Yuna dans le forum Administration
    Réponses: 12
    Dernier message: 08/01/2004, 09h14

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