Hi!

As a new user to nHibernate I ran in to trouble with a slow query.
Currently I ended up using a static query instead of a criteria based
query. I do expect it to my own fault but as a newbie I can't see what
I do wrong or should do it instead.

Would be very happy if somebody could point me in the right direction
or tell me what I do wrong!

Cheers
/Johan

My trial criteria looks like this:
ICriteria criteria = NHibernateSession.CreateCriteria(PersitentType)
    .SetFetchMode("Anvandare", FetchMode.Join)
    .SetFetchMode("Anvandare.AnvandareKunds", FetchMode.Join)
    .SetFetchMode("Anvandare.AnvandareKunds.Kund", FetchMode.Join)
    .SetFetchMode("Anvandare.AnvandareKunds.Kommun", FetchMode.Join)
    .SetFetchMode("Anvandare.AnvandareBehorighetEnhets",
FetchMode.Join)
    .SetFetchMode("Anvandare.AnvandareBehorighetEnhets.Enhet",
FetchMode.Join);
var anvandarcriteria = criteria.CreateCriteria((Elev e) =>
e.Anvandare);
var anvandarekundcriteria = anvandarcriteria.CreateCriteria((Anvandare
a) => a.AnvandareKunds);
var anvandarekundkundcriteria =
anvandarekundcriteria.CreateCriteria((AnvandareKund a) => a.Kund)
    .Add((Kund k) => k.ID == kundId);
var anbandarebehorighet = anvandarcriteria.CreateCriteria((Anvandare
a) => a.AnvandareBehorighetEnhets)
    .Add((AnvandareBehorighetEnhet abe) => abe.Behorighet.ID ==
(int)BehorighetEnum.Elev)
    .Add((AnvandareBehorighetEnhet abe) => abe.Inaktiv == false);
anbandarebehorighet.CreateCriteria((AnvandareBehorighetEnhet abe) =>
abe.Enhet)
    .Add((Enhet e) => e.ID == enhetId);

And the SQL query ( a bit extended compared to above) like this:
SELECT Elev.Id AS ElevId
    , Anvandare.personnummer AS Personnr
    , anvandare_kund.enamn AS Enamn
    , anvandare_kund.fnamn AS Fnamn
    , anvandare_kund.adress AS Adress
    , anvandare_kund.postnr AS Postnr
    , anvandare_kund.ort AS Ort
    , anvandare_kund.telefon AS Telefon
    , anvandare_kund.hemkommun AS Kommun
    , Enhet.skolID AS SkolID
    , Kursgrupp.namn AS Klass
    , Arskurs.Kort AS Arskurs
    , Enhet.namn AS Skolnamn
    , Fritids_Grundskola.Namn AS FritidsNamn
    , Fritids_Grundskola.Skolkod AS FritidsSkolkod
    , Fritids_Avdelning_Grundskola.Namn AS AvdelningsNamn
    , Sprak.scb AS HemspraksKod
FROM
    dbo.Elev
    LEFT OUTER JOIN dbo.Anvandare
      ON Elev.anvandare_id = Anvandare.id
    LEFT OUTER JOIN dbo.anvandare_kund
      ON anvandare_kund.anvandare_id = Anvandare.id
    LEFT OUTER JOIN dbo.Anvandare_Behorighet_Enhet
      ON Anvandare_Behorighet_Enhet.anvandare_id = Anvandare.id
    LEFT OUTER JOIN dbo.Enhet
      ON Elev.SenasteSkola_id = Enhet.id
    LEFT OUTER JOIN dbo.Elev_Kursgrupp
      ON Elev_Kursgrupp.elev_id = Elev.Id
    LEFT OUTER JOIN dbo.Kursgrupp
      ON Elev_Kursgrupp.kursgrupp_id = Kursgrupp.id
    LEFT OUTER JOIN dbo.Grupptyp
      ON Kursgrupp.grupptyp_id = Grupptyp.Id
    LEFT OUTER JOIN dbo.Arskurs
      ON Elev.arskurs_id = Arskurs.Id
    LEFT OUTER JOIN dbo.Elev_FritidsAvdelning_Grundskola
      ON Elev_FritidsAvdelning_Grundskola.elev_id = Elev.Id
    LEFT OUTER JOIN dbo.Fritids_Avdelning_Grundskola
      ON Elev_FritidsAvdelning_Grundskola.avdelning_id =
Fritids_Avdelning_Grundskola.id
    LEFT OUTER JOIN dbo.Fritids_Grundskola
      ON Fritids_Avdelning_Grundskola.fritids_id =
Fritids_Grundskola.id
    LEFT OUTER JOIN dbo.Sprak
      ON Elev.hemsprak_id = Sprak.id
WHERE
    Anvandare_Behorighet_Enhet.inaktiv = 0
    AND Anvandare_Behorighet_Enhet.enhet_id = :_enhetsId
    AND Anvandare_Behorighet_Enhet.behorighet_id = 3
    AND Grupptyp.Klass = 1";
    AND Arskurs.Kort = :_arskurs";
ORDER BY
    Enamn
    , Fnamn

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to