H
HQLNeuling
Gast
Hallo zusammen,
ich bin absoluter Neuling in Hibernate und habe ein Problem beim Laden von Objekten aus der Datenbank. Ich habe als Beispiel in meiner Klasse Service eine Collection vom Typ ServExport und in meiner Klasse ServExport ein Objekt vom Typ Service:
Klasse Service
Klasse ServImport
Lege ich nun Service-Objekte in die Datenbank ab und versuche sie an späterer Stelle wieder auszulesen und auf die Collections zuzugreifen, kommt die Fehlermeldung:
Ich habe mich im Internet ein bisschen zum Lazy Loading schlau gemacht und weiß das an dieser Stelle die Inhalte der Collection noch nachträglich aus der DB gelesen werden sollen. Verstehe nicht warum das nicht funktioniert, da ich eine Session geöffnet habe. Hatte auch schonmal versucht das Lazy Loading auszuschalten (
), aber das hat bei mehreren Collections in einer Klasse nicht funktioniert und will ich eigentlich auch nicht wegen der Performance.
Würde mich freuen wenn mir vllt jemand einen Tipp geben könnte!
ich bin absoluter Neuling in Hibernate und habe ein Problem beim Laden von Objekten aus der Datenbank. Ich habe als Beispiel in meiner Klasse Service eine Collection vom Typ ServExport und in meiner Klasse ServExport ein Objekt vom Typ Service:
Klasse Service
Java:
@OneToMany(mappedBy = "service")
private Collection<ServExport> exports = new HashSet<ServExport>();
Klasse ServImport
Java:
@ManyToOne
@JoinColumn
private Service service;
Lege ich nun Service-Objekte in die Datenbank ab und versuche sie an späterer Stelle wieder auszulesen und auf die Collections zuzugreifen, kommt die Fehlermeldung:
Java:
[2012-09-03 13:43:27,143] ERROR [main] org.slf4j.impl.JCLLoggerAdapter: failed to lazily initialize a collection of role: com.test.serviceAnwendung.db.hibernate.mapping.Service.exports, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.test.serviceAnwendung.db.hibernate.mapping.Service.exports, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
at com.test.serviceAnwendung.db.hibernate.utils.HibernateTransactionHandler.getExports(HibernateTransactionHandler.java:509)
at com.test.serviceAnwendung.TestAnwendung.getExports(TestAnwendung.java:114)
at test.test.TestZugriff.main(TestZugriff.java:51)
Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.test.serviceAnwendung.db.hibernate.mapping.Service.exports, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
at com.test.serviceAnwendung.db.hibernate.utils.HibernateTransactionHandler.getExports(HibernateTransactionHandler.java:509)
at com.test.serviceAnwendung.TestAnwendung.getExports(TestAnwendung.java:114)
at test.test.TestZugriff.main(TestZugriff.java:51)
Ich habe mich im Internet ein bisschen zum Lazy Loading schlau gemacht und weiß das an dieser Stelle die Inhalte der Collection noch nachträglich aus der DB gelesen werden sollen. Verstehe nicht warum das nicht funktioniert, da ich eine Session geöffnet habe. Hatte auch schonmal versucht das Lazy Loading auszuschalten (
Code:
fetch = FetchType.EAGER
Würde mich freuen wenn mir vllt jemand einen Tipp geben könnte!