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 :

Appel d'une liste dans une liste (JSTL)


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Appel d'une liste dans une liste (JSTL)
    Bonjour,

    (pour info j'utilise eclipse wtp 3.2, tomcat 5.5 hibernate 3.0 et base de donnée Mysql)

    Pour commencer j'ai creé une bdd, jusque la tous va bien,
    J'ai mappé la structure avec l'aide d'Hibernate.

    exemple pour la table A
    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
     
    <hibernate-mapping>
        <class name="A" table="a" lazy="false">
    		<meta attribute="sync-DAO">false</meta>
    		<id
    			name="Id"
    			type="integer"
    			column="id_ann"
    		>
    			<generator class="increment"/>
    		</id>
     
    //liste des property/attributs ...
     
    //et les "liens"
     
    <many-to-one name="m" class="M" column="id_m" unique="true" cascade="none"  />
     
    //et un lien many-to-many
     
    <set lazy="true" outer-join="true" 
    			name="liste"
    			table="e"
    			cascade="all"
    		>
    			<key column="id_a"/>
    			<many-to-many column="id_e" class="E"/>
    </set>
    ,

    le code de la classe A correspondante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public class A {
     
    	private Integer id;
    // ...liste attributs 
     
    	private M m;
    	private Set  liste=new HashSet();
     
    //accesseurs + constructeurs ...
    et enfin la jsp qui affiche les infos (avec au mileu un controleur qui effectue l'interface):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		<c:forEach var="p" items="${personnes}">
    				<tr>
    					<td><c:out value="${p.id}"/></td>
    					<td><c:out value="${p.titre}"/></td>
    					<td><c:out value="${p.url}"/></td>
    					<td><c:out value="${p.d}"/></td>
    					<td><c:out value="${p.m.nomMb}"/></td>
    			<c:forEach var="l" items="${p.liste}">
    					<c:out value="${l.id}"/>
    		        </c:forEach>
    		</c:forEach>
    l'affichage des attributs de p sont ok,
    l'affichage des attibuts de p.m sont aussi ok.

    Par contre si je rajoute l'affichage de la liste j'ai droit à un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    failed to lazily initialize a collection of role: A.liste, no session or session was closed
    je suis dispo à repondre à vos questions et preneur de toutes solutions
    ,

    Merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ta liste est marquée avec "lazy = true", ce qui signifie qu'elle est chargée à la demande, autrement dit dans ta jsp.
    Le problème est que lors de l'appel dans ta jsp, aucune session hibernate n'est ouverte, donc il est impossible à Hibernate de charger ta liste.
    Il y a plusieurs solution à ton problème :
    - charger ta liste, avant d'arriver à ta jsp
    - utiliser un filtre de servlet (par exemple) qui se charge d'ouvrir et fermer
    une session Hibernate, pour te permetter de charge tes collections dans tes jsp

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    en fait en mettant lazy à false ca passe

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Oui, ce n'est pas une très bonne idée si ta base contient beacoup de données et que tu as beaucoup de classes.
    Tu risques de rappatrier toute ta base pour rien.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    juste au moment ou tu remontes ton objet principal A, tu fais un appel a ta collection
    A.getListe().size();

    Tu garde ton lazy a true et comme tu sais que tu en auras besoin dans ta jsp tu remontes ta collection dans ce cas la.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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