Wie Fetch @OneToMany und @ManyToMany Personen
mein Problem ist sehr verwandt der folgenden Schritte aus:
Warum bin ich immer ein Hibernate-LazyInitializationException in das Spring MVC web-Anwendung, wenn die Daten korrekt angezeigt?
Habe ich die folgenden Eigenschaften auf eine bestimmte Entität:
@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;
Wie Sie vielleicht bemerkt haben, habe ich ein eifriger Fetch-Typ auf beiden Beziehungen, aber es gibt folgende:
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
Muss ich Zugriff auf beide Listen List<ColumnFormat> columnList
und List<Originator> originators
auf verschiedenen Bohnen, aber die sind beide von Fetch-Typ Eifrig bekomme ich das oben genannte problem, und wenn einer von Ihnen ist Faul bekomme ich die folgende:
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
Gibt es eine Möglichkeit zum abrufen der Listen auf die verschiedenen Bohnen ohne diese Probleme?
Eine Antwort kann hier gefunden werden : Hibernate kann nicht gleichzeitig Holen mehrere Taschen
InformationsquelleAutor camiloqp | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe nicht begegnet diesem problem vor, sondern nur googeln "können nicht gleichzeitig Holen mehrere Taschen" gibt dieser link auf den Hibernate-Foren.
Einer der blog-Beiträge in diesem link enthalten kann, die Lösung, die Sie suchen.
Ich akzeptiere Ihre Antwort, denn er löst die eigentliche Frage, die ich gestellt, aber eine neue Bedingung, die ich lösen musste, um es auf eine andere Art und Weise.
InformationsquelleAutor masotime
Ich alle gelöscht
fetch=FetchType.EAGER
- und es funktioniert richtig. Im usign Hibernate 3.5.6-Finale, Frühling 3.0.4 und Junit 4. Ich denke, fetch-BEGIERIG ist standardmäßig, weil mein Objekt lädt alle Kinder.Dies ist sessionFactory:
Das ist Klasse:
InformationsquelleAutor Rafael Ruiz Tabares