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 :

Accès impossible à un objet de ma liste retournée par Hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut Accès impossible à un objet de ma liste retournée par Hibernate
    Bonjour à tous,
    Mon problème est assez commun j'imagine, mais je n'ai pas trouvé de solutions :
    Mon projet utilise les techno suivantes :
    JAVA + Struts 2 + Hibernate
    Dans mon controller, je retourne une liste d'objets de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<User> userList = new ArrayList<User>();
    Remplie grâce à la requete HQL : Cette liste va donc contenir des objets User, et chaque User va contenir un objet Coordonnees (lien vers une autre table/objet).

    Mon problème est le suivant :
    Je voudrais afficher la liste de mes User(s) grâce à un "<s:iterator>" de Struts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <s:iterator value="userList">
        <s:property value="nom" />
        <s:property value="coordonnees.tel" />
    </s:iterator>
    Le "nom" de mon User est bien affiché, mais si je veux afficher le numéro de téléphone par exemple, je n'ai rien. Si je veux affiche simplement l'objet coordonnées, via un <s:property value="coordonnees" />, ca m'affichera : ognl.NoConversionPossible.

    Je pense savoir d'où vient le problème => Le Lazy Loading.
    En effet, dans mon code Java, si je fais un "System.out.println(user.getCoordonnees().getTel())" par exemple, j'aurais une exception NullPointerException qui me semble logique, car mon objet "coordonnees" n'est pas chargé ...

    Quelqu'un aurait-il une idée ?
    Merci

  2. #2
    Membre confirmé Avatar de POKOU
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 121
    Par défaut
    Bonjour,
    As-tu vérifié que coordonnées est bien déclaré dans ton bean User ?
    comme ici commentaires dans le bean Article :
    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
     
    @Entity
    public class Article implements Serializable {
     
    	private int id;
    	private String titre;
    	private String corp;
    	private Date creation;
    	private Set<Commentaire> commentaires;
    	private User auteur;
    ...
    	@OneToMany(cascade=CascadeType.ALL)
    	public Set<Commentaire> getCommentaires() {
    		return commentaires;
    	}
    ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Bonjour et merci pour ta réponse,

    Voici les infos que tu demandes :

    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
    @Entity
    @Table(name = "client", schema = "public")
    public class Client implements java.io.Serializable {
     
        private int id;
        private Coordonnees coordonnees
     
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "coordonnees_id")
        public Coordonnees getCoordonnees() {
            return this.coordonnees;
        }
     
        public void setCoordonnees(Coordonnees coordonnees) {
            this.coordonnees = coordonnees;
        }
    De même dans mon fichier HBM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <many-to-one name="coordonnees" class="fr.myProject.model.common.Coordonnees" fetch="select" cascade="all">
          <column name="coordonnees_id" />
      </many-to-one>

  4. #4
    Membre confirmé Avatar de POKOU
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 121
    Par défaut
    Là je sèche un peu !
    je n'utilise pas l'annotation @Table ni @JoinColumn.
    vérifie que ce n'est pas @OneToMany car un client peu avoir plusieurs coordonnées (tél du bureau, tel portable,...)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Citation Envoyé par POKOU Voir le message
    vérifie que ce n'est pas @OneToMany car un client peu avoir plusieurs coordonnées (tél du bureau, tel portable,...)
    Oui tout a fait, mais c'est un objet Coordonnées, qui contient toutes ces infos (mobile, fixe, tel, adresse etc...)

    Tant pis et merci pour ta réponse quand même.

    Quelqu'un d'autre aurait il une idée ?

  6. #6
    Membre confirmé Avatar de POKOU
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 121
    Par défaut
    tu as bien déclaré tes beans dans persistence.xml ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       <persistence-unit name="testHibernate">
     
     
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
     
    		<class>bean.Article</class>
    		<class>bean.Categorie</class>
     
          <properties>
    ainsi que la methode init() dans la classe java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public static void init()
    	{
    		emf = Persistence.createEntityManagerFactory("testHibernate");
    		EntityManager em = emf.createEntityManager();
    		EntityTransaction tx = em.getTransaction();
    		tx.begin();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/02/2014, 14h16
  2. Réponses: 0
    Dernier message: 02/06/2010, 23h57
  3. Réponses: 9
    Dernier message: 21/11/2008, 22h59
  4. Entité avec champs à null retournée par Hibernate
    Par nicdo77 dans le forum Hibernate
    Réponses: 2
    Dernier message: 13/09/2007, 16h47
  5. Réponses: 1
    Dernier message: 20/04/2007, 15h35

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