Abfragen von nicht zugeordneten Spalten in NHibernate

8

Ich habe eine Klasse, die mithilfe von NHibernate einer Tabelle zugeordnet ist. Das Problem besteht darin, dass nur einige der Eigenschaften den Spalten in der Tabelle zugeordnet sind. Das ist in Ordnung, weil die einzigen Spalten, die wir für die Anzeige verwenden, zugeordnet sind. Ich habe mich jedoch gefragt, ob es eine Möglichkeit gibt, Abfragen für andere Spalten in der Tabelle durchzuführen, die nicht den Eigenschaften in meiner Klasse zugeordnet sind.

Zum Beispiel haben wir eine Tabelle mit den folgenden Spalten:

%Vor%

und wir haben ein Objekt

%Vor%

und name und customerId werden zwar zugeordnet, aber DateCreated ist nicht, weil wir sie nirgends anzeigen. Wir möchten die Tabelle Customer für Kunden abfragen, die zu einem bestimmten Datum erstellt wurden. Gibt es eine Möglichkeit dies zu tun, ohne das DateCreated zuzuordnen? Es wäre auch vorzuziehen, dies unter Verwendung der Kriterien-API zu tun.

    
lomaxx 18.03.2009, 06:32
quelle

3 Antworten

11

Ayende Rahien hat einen Artikel geschrieben, der beschreibt, wie access="noop" im Mapping spezifiziert wird, um Nur-Abfrage-Eigenschaften anzugeben. Siehe NHibernate - Nur Abfrage Eigenschaften . Ich habe das selbst nicht versucht.

    
Mike Henry 11.07.2009, 05:12
quelle
5

Wird eine einfache SQL-Abfrage nicht verwendet? Ich kann es momentan nicht testen, aber ich könnte mir vorstellen, dass Sie nicht zugeordnete Felder abfragen könnten, solange Ihre Abfrage etwas zurückgibt, das Hibernate einem Objekt zuordnen kann. (Entschuldigung, falls dies bereits als Option ausgeschlossen wurde)

EDIT: Das scheint zu funktionieren:

%Vor%     
Andy White 18.03.2009 06:39
quelle
5

Mit HQL / Criteria-Abfragen kann NHibernate nur mit dem funktionieren, was zugeordnet wurde (obwohl roher SQL immer noch eine Option ist, wie Andy White hervorgehoben hat). Wenn Sie Kriterienabfragen verwenden möchten, müssen Sie die Spalte zuordnen.

NHibernate ist jedoch nicht darauf beschränkt, öffentlich zugängliche Member zu verwenden. Wenn Sie also das Feld CreateDate ausblenden möchten, deklarieren Sie eine private (möglicherweise schreibgeschützte?) Eigenschaft. Alternativ können Sie die Eigenschaft überspringen und NHibernate anweisen, Zugriff auf Feldebene zu verwenden, indem Sie access="field" für das Eigenschaftenelement im Mapping festlegen.

Ich weiß, dass Sie dies tun wollten, ohne das Feld zuzuordnen, aber ich glaube einfach nicht, dass es möglich ist (ohne die NHibernate-Quelle zu modifizieren;). Wenn Sie jedoch gegen das Feld abfragen, hat das Feld eine gewisse Relevanz für Ihre Domain und daher verdient es wahrscheinlich, dass es darauf abgebildet ist, und mit einem privaten oder geschützten Mitglied können Sie die Informationen an ihrem Platz verstecken.

    
Stuart Childs 18.03.2009 13:36
quelle