2008-08-23 9 views
1

Ich entwickle eine Webanwendung mit NHibernate. Können Sie mir sagen, wie man eine NHibernate-Abfrage für die folgende SQL-Abfrage schreiben:(N) Hibernate Auto-Join

SELECT v1.Id 
FROM VIEW v1 
LEFT JOIN VIEW v2 ON v1.SourceView = v2.Id 
ORDER BY v1.Position 

Es ist im Grunde ein Auto-beitreten, aber ich weiß nicht, wie dies in Nhibernate zu schreiben. Nehmen wir an, die Eigenschaftsnamen stimmen mit den Tabellenspaltennamen überein.

Antwort

1

Sie könnten einfach die Auswahl für die ursprüngliche Entität durchführen und die Zuordnung zwischen den beiden Objekten "faul = falsch" vornehmen. Solange die Entitäten zugeordnet sind, werden beide zurückgegeben und Sie erhalten keine LazyloadException, wenn Sie versuchen, auf das Objekt zuzugreifen.

Wenn Sie "lazy = false" nicht zuordnen möchten, können Sie auch die Ergebnisse durchlaufen und eine Art von Operation ausführen (z. B. fragen, ob es null ist; if (v1.AssocatedObject == null) { }) um sicherzustellen, dass die Daten geladen werden, während die Sitzung geöffnet ist.

Update:

Ich denke, dass es tatsächlich ein besseres ist ein als in, NHibernateUtil.Initialise(), die eine Sammlung initialisieren kann, ohne durch sie wandern zu müssen.