Hallo zusammen
Ich verwende nhibernate 1.2 mit asp.net 2.0, MSSQL2005 und habe grosse Performance-Probleme.
Ein Objekt Question hat mehrere Answers, Responses, Users welche die Question beantwortet haben etc.
Ein GetQuestion dauert bis zu 14 Sekunden.
Im Hibernate-Debug-Log sehe ich, dass dabei tausende von SQL-Queries abgesetzt werden. Erst die Question, dann jeden User der User-Collection, dann für jede Frage jedes dieser User, alle Antworten, etc... einfach alles, der gesamte Tree der an einem Question-Objekt hängt. Die Logausgabe wird schnell mal 100MB gross!
Das ist doch kein Lazy-Loading, oder? Für nur das Question-Objekt erwarte ich ein SQL-Query und nix weiter.. die Collections sollten doch nur bei Bedarf geladen werden.
Mit Version 1.2 sollte Lazy-Loading doch per Default aktiv sein.
Die Einstellung lazy="true" oder lazy="false" beim Collection-Mapping sowie in der class-definition bringt keinerlei Änderung.
Muss man lazy-loading sonst noch irgendwo aktivieren?
Vielen herzlichen Dank für Eure Hilfe, LG Patrick
Nachfolgend ein Ausschnitt aus dem Mapping-File:
Code:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="....." assembly="business" >
<class name="Question" table="t_question">
...
<many-to-one name="User" column="user_id" not-null="true" class=".....User" />
<set name="Answers" table="t_answer" cascade="all" inverse="true" order-by="pos asc" >
<key column="question_id" />
<one-to-many class="......Answer" />
</set>
<set name="Responses" table="t_response" order-by="CreationDate desc" >
<key column="question_id" />
<one-to-many class=".....Response" />
</set>
...
...