Comment faire pour Récupérer @OneToMany et @ManyToMany Entités
ma question est très liée à la suivante:
Pourquoi suis-je Hibernate LazyInitializationException en ce Printemps application web MVC lorsque les données s'affiche correctement?
J'ai les propriétés suivantes sur une entité particulière:
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.REMOVE})
@JoinColumn(referencedColumnName = "id", name = "ID_FORMAT_FILE")
private List<ColumnFormat> columnList;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "FILEFORMAT_ORIGINATOR", joinColumns = @JoinColumn(name = "FILEFORMAT_ID", referencedColumnName = "id")
, inverseJoinColumns = @JoinColumn(name = "ORIGINATOR_ID", referencedColumnName = "id"))
private List<Originator> originators;
Comme vous l'avez peut-être remarqué que j'ai une Hâte type d'Extraction sur les deux relations, mais il est de donner les éléments suivants:
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94)
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:119)
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:71)
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:54)
at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:133)
at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1914)
at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1937)
at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:3205)
at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3191)
at org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:728)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:348)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:902)
... 33 more
Je dois l'accès à des listes de List<ColumnFormat> columnList
et List<Originator> originators
sur différents haricots, mais si les deux sont de Type d'Extraction Désireux je reçois le problème ci-dessus, et si l'un d'eux est Paresseux je reçois le texte suivant:
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: xxx.xxx.xxx.xxx.FileFormat.originators, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
at org.hibernate.collection.AbstractPersistentCollection.readElementExistence(AbstractPersistentCollection.java:157)
at org.hibernate.collection.PersistentBag.contains(PersistentBag.java:262)
at java.util.ArrayList.batchRemove(ArrayList.java:632)
at java.util.ArrayList.removeAll(ArrayList.java:605)
at xxx.xxx.xxx.xxx.bean.FileFormatEdit.init(FileFormatEdit.java:1040)
... 75 more
Est-il un moyen de récupérer les listes dans les différentes fèves sans avoir ces problèmes?
Une réponse peut être trouvée ici : Hibernate ne peut pas simultanément extraire plusieurs sacs
OriginalL'auteur camiloqp | 2011-03-31
Vous devez vous connecter pour publier un commentaire.
N'ai pas rencontré ce problème avant, mais juste googler "ne peut à la fois extraire plusieurs sacs" renvoie ce lien sur l'Hibernation des forums.
L'un des billets de blog dans ce lien peut contenir la solution que vous cherchez.
Je vais accepter votre réponse, car il résout la question que j'ai posée, toutefois, compte tenu de l'obligation nouvelle, j'ai eu à le résoudre d'une façon différente.
OriginalL'auteur masotime
J'ai supprimé tous les
fetch=FetchType.EAGER
et il fonctionne correctement. Im avec Hibernate 3.5.6-Finale, le Printemps 3.0.4 et Junit 4. Je pense que fetch-DÉSIREUX, par défaut, parce que mon objet se charge de tous les enfants.C'est sessionFactory:
C'est la classe:
OriginalL'auteur Rafael Ruiz Tabares