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 :

[hibernate Tools][LazyInitializationException] Au secour (many-to-many)


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Par défaut [hibernate Tools][LazyInitializationException] Au secour (many-to-many)
    ça ne marche pas !!! je comprends plus....
    (vraiment, aidez moi ou je vais tout peter)

    l'enregistrement dans la table de liaison ne ce fait jamais ! j'ai ajouter les hashcode mais ca ma fait l'erreur sur les hashcode propriete.hashcode() qui est un Set.




    3 tables :
    films
    propriete
    film_has propriete

    2 objets:
    films
    propriete



    2 mappings :

    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 9 janv. 2007 22:59:11 by Hibernate Tools 3.2.0.beta8 -->
    <hibernate-mapping>
        <class name="com.db.hibernate.Films" table="films" catalog="vidix">
            <comment></comment>
            <id name="idfilms" type="int">
                <column name="idfilms" />
                <generator class="assigned" />
            </id>
            <property name="titre" type="string">
                <column name="titre" length="45">
                    <comment></comment>
                </column>
            </property>
            <property name="date" type="date">
                <column name="date" length="10">
                    <comment></comment>
                </column>
            </property>
            <property name="duree" type="time">
                <column name="duree" length="8">
                    <comment></comment>
                </column>
            </property>
            <property name="numExploit" type="string">
                <column name="numExploit" length="45">
                    <comment></comment>
                </column>
            </property>
            <property name="synopsis" type="string">
                <column name="synopsis" length="65535">
                    <comment></comment>
                </column>
            </property>
            <set name="sequenceses" inverse="true">
                <key>
                    <column name="films_idfilms">
                        <comment></comment>
                    </column>
                </key>
                <one-to-many class="com.db.hibernate.Sequences" />
            </set>
            <set name="proprieteses" inverse="true" table="films_has_proprietes">
                <key>
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <many-to-many entity-name="com.db.hibernate.Proprietes">
                    <column name="proprietes_idproprietes" not-null="true">
                        <comment></comment>
                    </column>
                </many-to-many>
            </set>
            <set name="fichesServiceses" inverse="true">
                <key>
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <one-to-many class="com.db.hibernate.FichesServices" />
            </set>
            <set name="documentses" inverse="true" table="films_has_documents">
                <key>
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <many-to-many entity-name="com.db.hibernate.Documents">
                    <column name="documents_iddocuments" not-null="true">
                        <comment></comment>
                    </column>
                </many-to-many>
            </set>
        </class>
    </hibernate-mapping>


    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 9 janv. 2007 22:59:11 by Hibernate Tools 3.2.0.beta8 -->
    <hibernate-mapping>
        <class name="com.db.hibernate.Proprietes" table="proprietes" catalog="vidix">
            <comment></comment>
            <id name="idproprietes" type="int">
                <column name="idproprietes" />
                <generator class="assigned" />
            </id>
            <many-to-one name="nomProprietes" class="com.db.hibernate.NomProprietes" fetch="select">
                <column name="nomProprietes_idnomProprietes" not-null="true">
                    <comment></comment>
                </column>
            </many-to-one>
            <property name="valeur" type="string">
                <column name="valeur" length="45">
                    <comment></comment>
                </column>
            </property>
            <set name="filmses" inverse="true" table="films_has_proprietes">
                <key>
                    <column name="proprietes_idproprietes" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <many-to-many entity-name="com.db.hibernate.Films">
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </many-to-many>
            </set>
        </class>
    </hibernate-mapping>


    2 objets mapper :
    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
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    package com.db.hibernate;
     
    // Generated 9 janv. 2007 22:59:11 by Hibernate Tools 3.2.0.beta8
     
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
     
    /**
     * Films generated by hbm2java
     */
    public class Films implements java.io.Serializable
    {
     
    	// Fields    
     
    	private int idfilms;
     
    	private String titre;
     
    	private Date date;
     
    	private Date duree;
     
    	private String numExploit;
     
    	private String synopsis;
     
    	private Set<Sequences> sequenceses = new HashSet<Sequences>(0);
     
    	private Set<Proprietes> proprieteses = new HashSet<Proprietes>(0);
     
    	private Set<FichesServices> fichesServiceses = new HashSet<FichesServices>(0);
     
    	private Set<Documents> documentses = new HashSet<Documents>(0);
     
    	// Constructors
     
    	/** default constructor */
    	public Films()
    	{
    	}
     
    	/** minimal constructor */
    	public Films(int idfilms)
    	{
    		this.idfilms = idfilms;
    	}
     
    	/** full constructor */
    	public Films(int idfilms, String titre, Date date, Date duree, String numExploit, String synopsis, Set<Sequences> sequenceses, Set<Proprietes> proprieteses, Set<FichesServices> fichesServiceses, Set<Documents> documentses)
    	{
    		this.idfilms = idfilms;
    		this.titre = titre;
    		this.date = date;
    		this.duree = duree;
    		this.numExploit = numExploit;
    		this.synopsis = synopsis;
    		this.sequenceses = sequenceses;
    		this.proprieteses = proprieteses;
    		this.fichesServiceses = fichesServiceses;
    		this.documentses = documentses;
    	}
     
    	// Property accessors
    	public int getIdfilms()
    	{
    		return this.idfilms;
    	}
     
    	public void setIdfilms(int idfilms)
    	{
    		this.idfilms = idfilms;
    	}
     
    	public String getTitre()
    	{
    		return this.titre;
    	}
     
    	public void setTitre(String titre)
    	{
    		this.titre = titre;
    	}
     
    	public Date getDate()
    	{
    		return this.date;
    	}
     
    	public void setDate(Date date)
    	{
    		this.date = date;
    	}
     
    	public Date getDuree()
    	{
    		return this.duree;
    	}
     
    	public void setDuree(Date duree)
    	{
    		this.duree = duree;
    	}
     
    	public String getNumExploit()
    	{
    		return this.numExploit;
    	}
     
    	public void setNumExploit(String numExploit)
    	{
    		this.numExploit = numExploit;
    	}
     
    	public String getSynopsis()
    	{
    		return this.synopsis;
    	}
     
    	public void setSynopsis(String synopsis)
    	{
    		this.synopsis = synopsis;
    	}
     
    	public Set<Sequences> getSequenceses()
    	{
    		return this.sequenceses;
    	}
     
    	public void setSequenceses(Set<Sequences> sequenceses)
    	{
    		this.sequenceses = sequenceses;
    	}
     
    	public Set<Proprietes> getProprieteses()
    	{
    		return this.proprieteses;
    	}
     
    	public void setProprieteses(Set<Proprietes> proprieteses)
    	{
    		this.proprieteses = proprieteses;
    	}
     
    	public Set<FichesServices> getFichesServiceses()
    	{
    		return this.fichesServiceses;
    	}
     
    	public void setFichesServiceses(Set<FichesServices> fichesServiceses)
    	{
    		this.fichesServiceses = fichesServiceses;
    	}
     
    	public Set<Documents> getDocumentses()
    	{
    		return this.documentses;
    	}
     
    	public void setDocumentses(Set<Documents> documentses)
    	{
    		this.documentses = documentses;
    	}
     
    	/* (non-Javadoc)
    	 * @see java.lang.Object#hashCode()
    	 */
    	@Override
    	public int hashCode()
    	{
    		final int PRIME = 31;
    		int result = 1;
    		result = PRIME * result + ((date == null) ? 0 : date.hashCode());
    		result = PRIME * result + ((documentses == null) ? 0 : documentses.hashCode());
    		result = PRIME * result + ((duree == null) ? 0 : duree.hashCode());
    		result = PRIME * result + ((fichesServiceses == null) ? 0 : fichesServiceses.hashCode());
    		result = PRIME * result + idfilms;
    		result = PRIME * result + ((numExploit == null) ? 0 : numExploit.hashCode());
     
    		Set test=proprieteses;
     
    		int testhc=test.hashCode();
     
    		result = PRIME * result + (
    				(proprieteses == null)
    				? 0 
    						: proprieteses.hashCode());
    		result = PRIME * result + ((sequenceses == null) ? 0 : sequenceses.hashCode());
    		result = PRIME * result + ((synopsis == null) ? 0 : synopsis.hashCode());
    		result = PRIME * result + ((titre == null) ? 0 : titre.hashCode());
    		return result;
    	}
     
    	/* (non-Javadoc)
    	 * @see java.lang.Object#equals(java.lang.Object)
    	 */
    	@Override
    	public boolean equals(Object obj)
    	{
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		final Films other = (Films) obj;
    		if (date == null)
    		{
    			if (other.date != null)
    				return false;
    		} else if (!date.equals(other.date))
    			return false;
    		if (documentses == null)
    		{
    			if (other.documentses != null)
    				return false;
    		} else if (!documentses.equals(other.documentses))
    			return false;
    		if (duree == null)
    		{
    			if (other.duree != null)
    				return false;
    		} else if (!duree.equals(other.duree))
    			return false;
    		if (fichesServiceses == null)
    		{
    			if (other.fichesServiceses != null)
    				return false;
    		} else if (!fichesServiceses.equals(other.fichesServiceses))
    			return false;
    		if (idfilms != other.idfilms)
    			return false;
    		if (numExploit == null)
    		{
    			if (other.numExploit != null)
    				return false;
    		} else if (!numExploit.equals(other.numExploit))
    			return false;
    		if (proprieteses == null)
    		{
    			if (other.proprieteses != null)
    				return false;
    		} else if (!proprieteses.equals(other.proprieteses))
    			return false;
    		if (sequenceses == null)
    		{
    			if (other.sequenceses != null)
    				return false;
    		} else if (!sequenceses.equals(other.sequenceses))
    			return false;
    		if (synopsis == null)
    		{
    			if (other.synopsis != null)
    				return false;
    		} else if (!synopsis.equals(other.synopsis))
    			return false;
    		if (titre == null)
    		{
    			if (other.titre != null)
    				return false;
    		} else if (!titre.equals(other.titre))
    			return false;
    		return true;
    	}
     
    }

    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
    package com.db.hibernate;
     
    // Generated 9 janv. 2007 22:59:11 by Hibernate Tools 3.2.0.beta8
     
    import java.util.HashSet;
    import java.util.Set;
     
    /**
     * Proprietes generated by hbm2java
     */
    public class Proprietes implements java.io.Serializable
    {
     
    	// Fields    
     
    	private int idproprietes;
     
    	private NomProprietes nomProprietes;
     
    	private String valeur;
     
    	private Set<Films> filmses = new HashSet<Films>(0);
     
    	// Constructors
     
    	/** default constructor */
    	public Proprietes()
    	{
    	}
     
    	/** minimal constructor */
    	public Proprietes(int idproprietes, NomProprietes nomProprietes)
    	{
    		this.idproprietes = idproprietes;
    		this.nomProprietes = nomProprietes;
    	}
     
    	/** full constructor */
    	public Proprietes(int idproprietes, NomProprietes nomProprietes, String valeur, Set<Films> filmses)
    	{
    		this.idproprietes = idproprietes;
    		this.nomProprietes = nomProprietes;
    		this.valeur = valeur;
    		this.filmses = filmses;
    	}
     
    	// Property accessors
    	public int getIdproprietes()
    	{
    		return this.idproprietes;
    	}
     
    	public void setIdproprietes(int idproprietes)
    	{
    		this.idproprietes = idproprietes;
    	}
     
    	public NomProprietes getNomProprietes()
    	{
    		return this.nomProprietes;
    	}
     
    	public void setNomProprietes(NomProprietes nomProprietes)
    	{
    		this.nomProprietes = nomProprietes;
    	}
     
    	public String getValeur()
    	{
    		return this.valeur;
    	}
     
    	public void setValeur(String valeur)
    	{
    		this.valeur = valeur;
    	}
     
    	public Set<Films> getFilmses()
    	{
    		return this.filmses;
    	}
     
    	public void setFilmses(Set<Films> filmses)
    	{
    		this.filmses = filmses;
    	}
     
    }

    j'ai donc bien les hashcode et pourtant :


    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
    23:05:17,446 DEBUG SQL:393 - select fichesserv0_.films_idfilms as films2_1_, fichesserv0_.idfichesServices as idfiches1_1_, fichesserv0_.idfichesServices as idfiches1_16_0_, fichesserv0_.films_idfilms as films2_16_0_, fichesserv0_.date as date16_0_ from vidix.fichesServices fichesserv0_ where fichesserv0_.films_idfilms=?
    Hibernate: select fichesserv0_.films_idfilms as films2_1_, fichesserv0_.idfichesServices as idfiches1_1_, fichesserv0_.idfichesServices as idfiches1_16_0_, fichesserv0_.films_idfilms as films2_16_0_, fichesserv0_.date as date16_0_ from vidix.fichesServices fichesserv0_ where fichesserv0_.films_idfilms=?
    23:05:17,447 DEBUG AbstractBatcher:476 - preparing statement
    23:05:17,452 DEBUG IntegerType:80 - binding '1' to parameter: 1
    23:05:17,457 DEBUG AbstractBatcher:374 - about to open ResultSet (open ResultSets: 0, globally: 0)
    23:05:17,459 DEBUG Loader:1040 - result set contains (possibly empty) collection: [com.db.hibernate.Films.fichesServiceses#1]
    23:05:17,459 DEBUG CollectionLoadContext:84 - uninitialized collection: initializing
    23:05:17,460 DEBUG Loader:682 - processing result set
    23:05:17,462 DEBUG Loader:709 - done processing result set (0 rows)
    23:05:17,463 DEBUG AbstractBatcher:381 - about to close ResultSet (open ResultSets: 1, globally: 1)
    23:05:17,464 DEBUG AbstractBatcher:366 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    23:05:17,465 DEBUG AbstractBatcher:525 - closing statement
    23:05:17,466 DEBUG Loader:839 - total objects hydrated: 0
    23:05:17,469 DEBUG CollectionLoadContext:262 - 1 collections were found in result set for role: com.db.hibernate.Films.fichesServiceses
    23:05:17,469 DEBUG CollectionLoadContext:206 - collection fully initialized: [com.db.hibernate.Films.fichesServiceses#1]
    23:05:17,470 DEBUG CollectionLoadContext:272 - 1 collections initialized for role: com.db.hibernate.Films.fichesServiceses
    23:05:17,471 DEBUG Loader:1934 - done loading collection
    23:05:17,473 DEBUG DefaultInitializeCollectionEventListener:61 - collection initialized
    23:05:23,679 ERROR LazyInitializationException:19 - illegal access to loading collection
    org.hibernate.LazyInitializationException: illegal access to loading collection
    	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:341)
    	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    	at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:256)
    	at com.db.hibernate.Films.hashCode(Films.java:181)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:185)
    	at com.db.hibernate.Films$$EnhancerByCGLIB$$84eb8843.hashCode(<generated>)
    	at java.util.HashMap.hash(HashMap.java:264)
    	at java.util.HashMap.put(HashMap.java:382)
    	at java.util.HashSet.add(HashSet.java:194)
    	at java.util.AbstractCollection.addAll(AbstractCollection.java:318)
    	at org.hibernate.collection.PersistentSet.endRead(PersistentSet.java:276)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:183)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:268)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:249)
    	at org.hibernate.loader.Loader.endCollectionLoad(Loader.java:866)
    	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:853)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:717)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    	at org.hibernate.loader.Loader.loadCollection(Loader.java:1918)
    	at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
    	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
    	at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
    	at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
    	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
    	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    	at org.hibernate.collection.PersistentSet.hashCode(PersistentSet.java:358)
    	at com.db.hibernate.Proprietes.hashCode(Proprietes.java:96)
    	at java.util.HashMap.hash(HashMap.java:264)
    	at java.util.HashMap.put(HashMap.java:382)
    	at java.util.HashSet.add(HashSet.java:194)
    	at java.util.AbstractCollection.addAll(AbstractCollection.java:318)
    	at org.hibernate.collection.PersistentSet.endRead(PersistentSet.java:276)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:183)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:268)
    	at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:249)
    	at org.hibernate.loader.Loader.endCollectionLoad(Loader.java:866)
    	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:853)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:717)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    	at org.hibernate.loader.Loader.loadCollection(Loader.java:1918)
    	at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
    	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
    	at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
    	at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
    	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
    	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
    	at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:141)
    	at test.Test1.main(Test1.java:32)




    pour essayer :
    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
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		Films f = (Films) session.load(Films.class, 1);
     
    		Set p=f.getProprieteses();
    		System.out.println(">>>>>>>>>>>>>< film titre : " + f.getTitre());
    		Iterator ps= p.iterator();
     
    		for (; ps.hasNext();)
    		{
    			Proprietes element = (Proprietes) ps.next();
     
     
    			System.out.println("!!!!!!!!!!!!!!!!!!!!!!! \n     film titre : " + element.getValeur() + " Time: " + element.getNomProprietes().getNom());
    		}
     
     
     
    		NomProprietes np=(NomProprietes) session.load(NomProprietes.class , 1);
    		Proprietes pp=new Proprietes();
    		pp.setNomProprietes(np);
    		pp.setValeur("finlandais");
     
     
    		ps= f.getProprieteses().iterator();
     
    		for (; ps.hasNext();)
    		{
    			Proprietes element = (Proprietes) ps.next();
     
     
    			System.out.println("film titre : " + element.getValeur() + " Time: " + element.getNomProprietes().getNom());
    		}
    		//session.saveOrUpdate(f);
     
     
     
     
     
    		f.getProprieteses().add(pp);
     
     
    		pp.getFilmses().add(f);
     
    		session.save(pp);
    		//session.update(f);
     
     
    		session.getTransaction().commit();		
     
    		HibernateUtil.getSessionFactory().close();
    Merci (infiniment)

  2. #2
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set test=proprieteses;
    int testhc=test.hashCode();   <------ apparement l'erreur viendrais d'ici !
    result = PRIME * result + ((proprieteses == null)....

    Est-ce que redefinir les methode hashcode et equal est vraiment nécessaire ?

    avec j'ai l'exception LazyInitializationException

    et sans je n'ai pas d'enregistrement

  3. #3
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set p=f.getProprieteses();
    quand tu fais ça tu tente de charger les proprietes de film.
    tu as bien chargé ta classe film.
    mais par defaut dans hibernate les set ne sont pas chargés (lazy loading, chargement paresseux, ie lazy="true");
    une solution simple pour charger tout les set à chaque fois que tu charges un film, ajouter lazy="false dans le mapping :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <set name="proprieteses" inverse="true" table="films_has_proprietes" lazy="false">
                <key>
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <many-to-many entity-name="com.db.hibernate.Proprietes">
                    <column name="proprietes_idproprietes" not-null="true">
                        <comment></comment>
                    </column>
                </many-to-many>
            </set>
    sinon si tu veux charger ces proprietes au cas par cas (et pas chaque fois que tu recupere un film) , tu mets lazy=true dans le set (ou rien puisque c la valeur par defaut).
    et tu provoques le chargement des proprietes :
    requete = "from film f left join fetch f.proprietes";

  4. #4
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Par défaut
    Bein je comprends pas bien le rapport car mais propriete sont bien charge puisque je les affiche dans la boucle , mais c'est la mise a jour (donc en fait l'enregistrement dans la table de liaison ) qui ne ce fait pas .

    pas une autre idée ???

  5. #5
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Ha pardon.
    Hibernate n'enregistre les enfants de ton objet parents que si tu "cascade".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <set name="proprieteses" inverse="true" table="films_has_proprietes" lazy="false" cascade="save-update">
                <key>
                    <column name="films_idfilms" not-null="true">
                        <comment></comment>
                    </column>
                </key>
                <many-to-many entity-name="com.db.hibernate.Proprietes">
                    <column name="proprietes_idproprietes" not-null="true">
                        <comment></comment>
                    </column>
                </many-to-many>
     </set>
    pour les effacer si tu effaces le parent il faut un cascade="delete"
    et pour les 2 : cascade="all"
    ou plus radical "all-delete-orphan"

    plus d'info sur cascade dans la doc

Discussions similaires

  1. hibernate tools 3.2.4 ne genere pas <many-to-one>
    Par yacine.dev dans le forum Hibernate
    Réponses: 0
    Dernier message: 26/11/2009, 17h33
  2. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  3. [hibernate 3] mapping many-to-many
    Par darkyspirit dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/12/2006, 19h37
  4. [Hibernate] delete sur un many-to-many
    Par Gob4 dans le forum Hibernate
    Réponses: 1
    Dernier message: 10/05/2006, 16h26
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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