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 :

[lazy] Annotation et NullPointer


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut [lazy] Annotation et NullPointer
    Bonjour,
    je développe une appli hibernate 3.2.5.ga, hibernate-annotations 3.3.0.ga, spring 2.0.7 et jsf (jsf implé sun 1.2, ajax4jsf et richfaces).
    J'ai des associations et collections en lazy que je declare comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @ManyToOne(fetch = FetchType.LAZY, optional = false, targetEntity = Profil.class)
    @JoinColumn(name = "pro_np_id", referencedColumnName = "pro_np_id", nullable = false)
    private IProfil profil;
    Quand je fais un getProfil(), j'ai une null pointer exception. Si je mets FetchType.EAGER, je n'ai pas d'erreur. Apres debug via le debugger eclipse, je me rends compte que utilisateur.profil n'est pas null, c'est un proxy cglib, mais que par contre toutes les proprietes de ce profils valent "null" (meme les proprietés de base comme un int uid). Je precise que je suis toujours dans la meme session (hibernate), en gros je fais un dao.findUtilisateur().getProfil().getUid();

    Primo, pourquoi n'ais-je pas de LazyException? Et comment resoudre ce probleme? je cherche depuis 2 jours, je ne comprends pas. Je ne pense pas que cela vienne des annotations, mais sait-on jamais...

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Tu ne devrais pas plutôt mettre tes annotations JPA sur les getters au lieu des champs ?
    Essaies ça et tiens nous au courant.

    Bonne chance.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Je vais tenter, mais etant donné que lorsque je mets FetchType.EAGER ca marche, je pense pas que ca vienne de la... Et quand je regarde dans les logs je vois bien qu'il me map mes 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
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    13 nov. 2007 16:02:44,696 - INFO main org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.3.0.GA
    13 nov. 2007 16:02:44,759 - INFO main org.hibernate.cfg.Environment - Hibernate 3.2.5
    13 nov. 2007 16:02:44,774 - INFO main org.hibernate.cfg.Environment - hibernate.properties not found
    13 nov. 2007 16:02:44,774 - INFO main org.hibernate.cfg.Environment - Bytecode provider name : cglib
    13 nov. 2007 16:02:44,790 - INFO main org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
    13 nov. 2007 16:02:45,149 - DEBUG main org.hibernate.cfg.AnnotationConfiguration - Validator not present in classpath, ignoring event listener registration
    13 nov. 2007 16:02:45,149 - DEBUG main org.hibernate.cfg.AnnotationConfiguration - Search not present in classpath, ignoring event listener registration
    13 nov. 2007 16:02:45,149 - DEBUG main org.hibernate.cfg.Configuration - Preparing to build session factory with filters : {}
    13 nov. 2007 16:02:45,149 - DEBUG main org.hibernate.cfg.AnnotationConfiguration - Execute first pass mapping processing
    13 nov. 2007 16:02:45,446 - DEBUG main org.hibernate.cfg.AnnotationConfiguration - Process hbm files
    13 nov. 2007 16:02:45,446 - DEBUG main org.hibernate.cfg.AnnotationConfiguration - Process annotated classes
    13 nov. 2007 16:02:45,493 - INFO main org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur
    13 nov. 2007 16:02:45,524 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column DTYPE unique false
    13 nov. 2007 16:02:45,571 - DEBUG main org.hibernate.cfg.annotations.EntityBinder - Import with entity name=Utilisateur
    13 nov. 2007 16:02:45,618 - INFO main org.hibernate.cfg.annotations.EntityBinder - Bind entity fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur on table utilisateur
    13 nov. 2007 16:02:45,618 - DEBUG main org.hibernate.cfg.AnnotationBinder - Add sequence generator with name: uid_generator
    13 nov. 2007 16:02:45,618 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur property annotation
    13 nov. 2007 16:02:45,665 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur property annotation
    13 nov. 2007 16:02:45,665 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur field annotation
    13 nov. 2007 16:02:45,665 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur field annotation
    13 nov. 2007 16:02:45,696 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.uid
    13 nov. 2007 16:02:45,696 - DEBUG main org.hibernate.cfg.Ejb3Column - Column(s) overridden for property uid
    13 nov. 2007 16:02:45,696 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_np_id unique false
    13 nov. 2007 16:02:45,712 - DEBUG main org.hibernate.cfg.AnnotationBinder - uid is an id
    13 nov. 2007 16:02:45,712 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for uid
    13 nov. 2007 16:02:45,712 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property uid
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Bind @Id on uid
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.actif
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_b_actif unique false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property actif with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for actif
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property actif
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.dateCreation
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_d_dateCreation unique false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property dateCreation with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for dateCreation
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property dateCreation
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.dateDernierAcces
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_d_dateDernierAcces unique false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property dateDernierAcces with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for dateDernierAcces
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property dateDernierAcces
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.email
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_t_email unique true
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property email with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for email
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property email
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.identifiant
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_t_identifiant unique true
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property identifiant with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for identifiant
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property identifiant
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.motDePasse
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column uti_t_motDePasse unique false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property motDePasse with lazy=false
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for motDePasse
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property motDePasse
    13 nov. 2007 16:02:45,727 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.profil
    13 nov. 2007 16:02:45,743 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column pro_np_id unique false
    13 nov. 2007 16:02:45,743 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column profil unique false
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property profil
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Utilisateur.zoneGeographique
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column zge_np_id unique false
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column zoneGeographique unique false
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property zoneGeographique
    13 nov. 2007 16:02:45,759 - INFO main org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column DTYPE unique false
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.annotations.EntityBinder - Import with entity name=Profil
    13 nov. 2007 16:02:45,759 - INFO main org.hibernate.cfg.annotations.EntityBinder - Bind entity fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil on table profil
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Add sequence generator with name: uid_generator
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil property annotation
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil property annotation
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil property annotation
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil field annotation
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil field annotation
    13 nov. 2007 16:02:45,759 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil field annotation
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil.uid
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.Ejb3Column - Column(s) overridden for property uid
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column pro_np_id unique false
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.AnnotationBinder - uid is an id
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for uid
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property uid
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.AnnotationBinder - Bind @Id on uid
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil.libelle
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.Ejb3Column - Column(s) overridden for property libelle
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column pro_t_libelle unique true
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - binding property libelle with lazy=false
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for libelle
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property libelle
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.AnnotationBinder - Processing annotations of fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil.droits
    13 nov. 2007 16:02:45,774 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column null unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column element unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column mapkey unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column null unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column pro_np_id unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.Ejb3Column - Binding column dro_np_id unique false
    13 nov. 2007 16:02:45,821 - DEBUG main org.hibernate.cfg.annotations.CollectionBinder - Collection role: fr.grouperatp.ratp.cerbere2.impl.model.auth.Profil.droits
    13 nov. 2007 16:02:45,837 - DEBUG main org.hibernate.cfg.annotations.PropertyBinder - Building property droits
    ..................

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    C'est encore pire si je mets mes annotations sur mon getProfil, il me dit que "ERROR: column utilisateu0_.profil does not exist". J'ai essayé aussi sur le setProfil, ca me provoque la meme erreur.

  5. #5
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Ok.
    IProfil est bien une interface, n'est ce pas ?

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu utilises les EJB 3 ?
    Le Fetch.EAGER est un classique du genre dans la mesure où c'est l'EntityManager du conteneur d'EJB qui est utilisé, et donc, de retour à la couche JSF, le context est perdu...
    L'alternative à EAGER serait de fournir l'EntityManager (par la couche JSF) aux EJB

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bref, si IProfil est bien une interface, alors il faut l'instancier à la main, de la même façon qu'on fait si on a un champ de type List ou Set.

    donc, tu devrais faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private IProfil profil = new Profil();
    Je crois que c'est ça.

    Bonne chance.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Alors oui IProfil est une interface.

    Je ne sais pas ce qui entends par "utiliser les EJB3". Je n'utilise QUE les annotations EJB3, ni entity manager ni quoi que ce soit d'autre. A priori, je voulais egalement eviter d'utiliser des annotations hibernate specifique (comme @Proxy ou @Collections).

    OButterlin pourais tu expliciter un peu stp? ou un exemple de code?

    J'ai bien vue qu'il existait des annotations @EntityManager, mais je n'ai quasimment rien vue a ce sujet dans la doc de hibernate-annotations. Pour moi hibernate gere ca correctement, mais si ce n'est pas le cas je vais le faire a la main...

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comme je le disais dans mon précédent post, si le context est du côté conteneur EJB, lorsque tu retournes à la couche de présentation (JSF), tes EJB sont "déconnectés".
    De ce fait, toutes les listes et références non initialisées dans la couche EJB ne peuvent plus être lus (car plus rattachés à un context actif)

    C'est plus clair ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Ok c'est clair, c'est le principe du Lazy, sauf que je ne comprends pas pourquoi il n'utilise pas la traditionnelle session hibernate.

    J'ai un openSessionInViewFilter dans mon web.xml, il me faudrai alors plutot un openEntityManagerInViewFilter?

    En fait j'ai du mal a voir pourquoi je devrais utiliser un EntityManager, moi je n'utilise les annotations EJB3 QUE pour declarer mon mapping hibernate, je ne veux pas vraiment utiliser EJB3 en fait, uniquement les annotations pour le mapping. Peut etre que je m'y prends mal dans ce cas. Mais je n'ai meme pas de persistence.xml...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    djo.mos, encore une fois, si je mets FetchType.EAGER ca marche, donc ca ne viens probablement pas de la. Je vais tester quand meme, mais je suis sur a 99% que ce n'est pas ca.

  12. #12
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Ok, t'as raison: j'ai du looper ça, pardon ... je dois être fatigué en fin de journée

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    djo.mos, j'ai testé, ce n'est pas ca

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Peux-tu nous montrer le code qui génère l'exception, ainsi que la trace complete de cette exception ?
    Quand on est en mode FetchType.LAZY, l'objet n'est pas initialisé, un proxy est utilisé à la place avec seul le champ id non null. Et comme tu as bien défini optional = false dans le @ManyToOne, je ne vois pas pourquoi l'objet profil serait null.
    SCJP 5 / SCBCD 1.3 Certified

  15. #15
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Moi ce que j'aimerais voir, c'est la façon de récupérer la session...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Le code concerné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public boolean isUtilisateurCourantGestionnaire() {
            if (getUtilisateurCourant().getProfil().getUid().equals(ConstantesDroits.PROFIL_GESTIONNAIRE)) {
                return true;
            }
            return false;
        }
    Cette methode est dans un objet stocké en session. L'utilisateur est passé au constructeur de cet objet, qui est appelé par la fonction login:
    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
    public final String login() {
     
            if (Utilities.isEmptyString(getLogin())) {
                addErrorFacesMessage(null, getMessage("error.invalidLogin"));
                return failure();
            }
     
            if (Utilities.isEmptyString(getPassword())) {
                addErrorFacesMessage(null, getMessage("error.invalidPassword"));
                return failure();
            }
     
            final IUtilisateur utilisateur = Services.getAuthService().findUtilisateurByIdentifiant(
                    getLogin());
     
            if (utilisateur == null) {
                addErrorFacesMessage(null, getMessage("error.noSuchUser"));
                return failure();
            }
            if (!utilisateur.getActif().booleanValue()) {
                addErrorFacesMessage(null, getMessage("error.accountDisabled"));
                return failure();
            }
            if (!MD5Utilities.testPassword(getPassword(), utilisateur.getMotDePasse())) {
                addErrorFacesMessage(null, getMessage("error.badPassword"));
                return failure();
            }
     
            utilisateur.setDateDernierAcces(new Date(System.currentTimeMillis()));
            Services.getAuthService().saveUtilisateur(utilisateur);
     
            ContexteSecurite contexte = new ContexteSecurite(utilisateur);
     
            getSession(true).setAttribute(Constants.IS_USER_LOGGEDIN_KEY, Boolean.TRUE);
            getSessionBean().setContexteSecurite(contexte);
            getSessionBean().init();
     
            return success();
        }
    La méthode login est elle dans un bean en scope request, elle est appelé depuis la page JSF. Je precise que le AuthService est juste un wrapper autour du dao. Celui ci utilise les outils spring, en particulier HibernateDaoSupport.

    La trace de l'exception:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    14 nov. 2007 09:33:14 com.sun.faces.application.ActionListenerImpl processAction
    GRAVE: java.lang.NullPointerException
    javax.faces.el.EvaluationException: java.lang.NullPointerException
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        at javax.faces.component.UICommand.broadcast(UICommand.java:394)
        at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:184)
        at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:162)
        at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:350)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
        at fr.grouperatp.ratp.cerbere2.web.servlets.CustomFacesServlet.service(CustomFacesServlet.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:143)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:273)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at fr.grouperatp.ratp.cerbere2.web.filters.RedirectFilter.doFilter(RedirectFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NullPointerException
        at fr.grouperatp.ratp.cerbere2.web.ContexteSecurite.isUtilisateurCourantGestionnaire(ContexteSecurite.java:59)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:146)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.initLiaison(MaterielArbre.java:292)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:141)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.initMcca(MaterielArbre.java:229)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:132)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.init(MaterielArbre.java:119)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.getTreeModel(MaterielArbre.java:107)
        at fr.grouperatp.ratp.cerbere2.web.tree.ArbreBean.changeTypeTree(ArbreBean.java:47)
        at fr.grouperatp.ratp.cerbere2.web.beans.SessionBean.init(SessionBean.java:54)
        at fr.grouperatp.ratp.cerbere2.web.pages.LoginBean.login(LoginBean.java:72)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.el.parser.AstValue.invoke(Unknown Source)
        at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
        at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 39 more
    14 nov. 2007 09:33:14 com.sun.faces.lifecycle.InvokeApplicationPhase execute
    ATTENTION: ${LoginBean.login}: java.lang.NullPointerException
    javax.faces.FacesException: ${LoginBean.login}: java.lang.NullPointerException
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
        at javax.faces.component.UICommand.broadcast(UICommand.java:394)
        at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:184)
        at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:162)
        at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:350)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
        at fr.grouperatp.ratp.cerbere2.web.servlets.CustomFacesServlet.service(CustomFacesServlet.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:143)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:273)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at fr.grouperatp.ratp.cerbere2.web.filters.RedirectFilter.doFilter(RedirectFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Unknown Source)
    Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        ... 38 more
    Caused by: java.lang.NullPointerException
        at fr.grouperatp.ratp.cerbere2.web.ContexteSecurite.isUtilisateurCourantGestionnaire(ContexteSecurite.java:59)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:146)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.initLiaison(MaterielArbre.java:292)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:141)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.initMcca(MaterielArbre.java:229)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.updateTree(MaterielArbre.java:132)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.init(MaterielArbre.java:119)
        at fr.grouperatp.ratp.cerbere2.web.pages.materiel.tree.MaterielArbre.getTreeModel(MaterielArbre.java:107)
        at fr.grouperatp.ratp.cerbere2.web.tree.ArbreBean.changeTypeTree(ArbreBean.java:47)
        at fr.grouperatp.ratp.cerbere2.web.beans.SessionBean.init(SessionBean.java:54)
        at fr.grouperatp.ratp.cerbere2.web.pages.LoginBean.login(LoginBean.java:72)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.el.parser.AstValue.invoke(Unknown Source)
        at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
        at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 39 more
    14 nov. 2007 09:33:14 com.sun.faces.lifecycle.Phase doPhase
    GRAVE: JSF1054: (Phase ID: INVOKE_APPLICATION 5, View ID: /pages/login.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@aa168c]
    javax.servlet.ServletException: ${LoginBean.login}: java.lang.NullPointerException
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
        at fr.grouperatp.ratp.cerbere2.web.servlets.CustomFacesServlet.service(CustomFacesServlet.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:143)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:273)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at fr.grouperatp.ratp.cerbere2.web.filters.RedirectFilter.doFilter(RedirectFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Unknown Source)
    La recuperation de la session est sensé etre faite par le OpenSessionInViewFilter (on le voit bien dans les traces).

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    A tout hasard je vous montre aussi la déclaration des classe:

    La classe profil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Entity(name = "Profil")
    @Table(name = "profil")
    @AttributeOverrides(value = {
            @AttributeOverride(name = "uid", column = @Column(name = "pro_np_id")),
            @AttributeOverride(name = "libelle", column = @Column(name = "pro_t_libelle", unique = true, nullable = false)) })
    @SequenceGenerator(name = "uid_generator", sequenceName = "seq_profil", allocationSize = Constants.HIBERNATE3_SEQUENCE_ALLOCATION_SIZE)
    public class Profil extends AbstractLibelleObject implements IProfil {
    La classe utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Entity(name = "Utilisateur")
    @Table(name = "utilisateur")
    @AttributeOverrides(value = { @AttributeOverride(name = "uid", column = @Column(name = "uti_np_id")) })
    @SequenceGenerator(name = "uid_generator", sequenceName = "seq_utilisateur", allocationSize = Constants.HIBERNATE3_SEQUENCE_ALLOCATION_SIZE)
    public class Utilisateur extends AbstractObject implements IUtilisateur {
    Ces classes etendent AbstractObject ou AbstractLibelleObject:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @MappedSuperclass
    public abstract class AbstractObject implements IObject {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @MappedSuperclass
    public abstract class AbstractLibelleObject extends AbstractObject implements ILibelleObject {

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour,
    Je pense que c'est getUid() qui renvoie un objet null, et donc l'appel getUid().equals() génère le NullPointerException. Tu devrais peut-être forcer d'abord l'initialisation du proxy avant, en appellant le getter d'une propriété autre que l'id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public boolean isUtilisateurCourantGestionnaire() {
            getUtilisateurCourant().getProfil().getPropriete();  // initialiser le proxy
            String uid = getUtilisateurCourant().getProfil().getUid();
            if (uid.equals(ConstantesDroits.PROFIL_GESTIONNAIRE)) {
                return true;
            }
            return false;
        }
    SCJP 5 / SCBCD 1.3 Certified

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Alors j'ai lu la doc hibernate, et j'apprend qu'il existe 3 types de lazy loading: le collection lazy loading, le association lazy loading, et le property lazy loading. Le property sert normallement a declarer une string en lazy par exemple.
    J'apprends aussi que pour utiliser le property lazy loading, il faut instrumentaliser le bytecode a la compilation. Bon, je suis visiblement dans le cas d'un association lazy loading, mais on sait jamais.
    Donc je teste, j'instrumentalise mon bytecode, et la, ca marche!!

    Alors pourquoi mon association qui est visiblement une association (@ManyToOne et pas @Basic) est considéré par hibernate comme un property lazy loading? Je suppose qu'il faudrai que je declare mes annotations sur les getters, mais si je fais ca j'ai une erreur (voir plus haut)

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Je ne pense pas que tu ais besoin d'aller instrumentaliser le bytecode pour ça. Il te suffit de forcer l'initialisation du proxy lorsque nécessaire, en appelant une propriété de ton objet autre que son id, et cela tant que la session hibernate reste ouverte.
    SCJP 5 / SCBCD 1.3 Certified

Discussions similaires

  1. @EJB annotation et lazy relation
    Par Sugus dans le forum Java EE
    Réponses: 1
    Dernier message: 14/09/2010, 13h33
  2. [EJB3] Annotations non reconnues
    Par ericw78 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/03/2006, 21h35
  3. [HIBERNATE 3]Lazy loading
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 11
    Dernier message: 08/02/2006, 22h40
  4. [FPDF] Comment mettre une annotation sur un Pdf déjà existant en PHP
    Par shequet dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/09/2005, 11h23

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