# Hibernate - Session(Factory) : Speicherung der Queries/Results



## timbeau (24. Feb 2011)

Hallo, ich versuchs kurz zu machen: 

Ich speicher Objekte und anscheinend werden alle Queries gespeichert. Vielleicht um eine Transaktion rückgängig zu machen? 
Verwendete Technologien: 
Hibernate 3.1.3
h2 1.1.112

Code für die Speicherung: 


```
try {
			
			for (String nominative : listWithTitel) {
				Substantive sub = subBuilder(nominative);
				GenerateSubstantiveDeklination gsd = new GenerateSubstantiveDeklination();
				List<SubstantiveDeklination> subDekList = gsd
						.generateAllSubstantiveDeklinations(sub);
				sub.setSubDekl(subDekList);
				sessionFactory.openSession();

				sessionFactory.getCurrentSession().beginTransaction();
				sessionFactory.getCurrentSession().save(sub);			
				sessionFactory.getCurrentSession().getTransaction().commit();
				
			}
		} catch (HibernateException e) {
			if (sessionFactory.getCurrentSession().getTransaction() != null) {
				sessionFactory.getCurrentSession().getTransaction().rollback();
			}
			throw e;
		} finally {
			if (sessionFactory.getCurrentSession() != null) {
				sessionFactory.getCurrentSession().close();
			}

		}
		
		sessionFactory.close();
		sessionFactory = null;
	}
```

Alles was gelesen oder geschrieben wird, wird gespeichert und müllt mir den Ram zu. snd-lvl-cache ist deaktiviert, query-cache ebenfalls. 

Kennt ihr das Problem? Ich hab schon soviel gegoogelt, probiert usw, ich weiß nicht mehr was ich noch tun könnte. ;(


----------



## SlaterB (24. Feb 2011)

eigene Queries hast du doch gar nicht, es werden sicherlich die erzeugten Objekte gecacht?

das nennt sich Session-Cache, ab und zu mal session.clear() hilft, mit der Methode noch nicht in Berührung gekommen?
ob es sich im Voraus abschalten läßt, kann ich nicht sagen

siehe z.B.
Understanding Caching in Hibernate – Part One : The Session Cache Application Performance, Scalability and Architecture ? The dynaTrace Blog
(in dem Link wird clear() aber nicht erwähnt nach meiner kurzen Textsuche)


----------



## timbeau (24. Feb 2011)

Entschuldigung, 

ich hatte bereits mit clear() & flush() gearbeitet, daran liegt es leider nicht. 

Es werden die von Hibernate generierten SQL-Queries gespeichert, inkl. der Werte. 

Im übrigen sind die Listen aktuell auf eine Größe von 30 beschränkt, danach geht die Methode zurück und wird wieder mit einer Liste aufgerufen. Somit wird auch die Factory eigentlich neu generiert. 
Warum zur H**** werden die gespeicherten Daten(char[]s ohne Ende) noch referenziert? 

Ich verstehs nicht.


----------



## SlaterB (24. Feb 2011)

und wenn du nur die Objekte erzeugst und etwa allein die Zeile
> sessionFactory.getCurrentSession().save(sub); 
auskommentierst, dann bleibt der Speicher leer?

hast du das als Test ausgeführt um sicherzustellen dass nicht irgendwo anders statische Variablen befüllt werden?
(eher kleiner Strohhalm, besonders wenn du so genau sagst dass SQL-Queries gespeichert werden,
aber sonst habe ich vorerst einfach nichts mehr zu sagen)


----------



## timbeau (24. Feb 2011)

Also es werden mit anderen Aktionen noch DB-Queries abgesetzt in diesen Methoden, davon wird jedoch ebenfalls jede Session(Factory) geschlossen. Ich habe jetzt gerade gestestet, wenn ich nichts speichere/generiere bleibt der Speicher nahezu leer. 

Really ugly.


----------

