我使用Hibernate API的標準時,有一個問題:Hibernate的標準訪問= 「字段」 映射API
var query = session.QueryOver<MyClass>().Where(param => param.Name == "myFilterName").List<MyClass>();
如果運行這一說法,一個NHibernate.QueryException拋出:
可能不解決產權:名稱:MyClass的
而在堆棧跟蹤:
在NHibernate.Persister.Entity.AbstractPropertyMapping.ToType(字符串 propertyName的)
MyClass.hbm.xml文件具有映射的這樣的特性:
<property name="name" access="field">
<column name="NAME" length="50" not-null="true" />
</property>
我覺得現在的問題是因爲hibernate無法訪問MyClass的屬性「名稱」,因爲它與access="field"
映射,但我無法通過這種方式訪問屬性應用程序設計要求。 這個想法是通過使用Criteria API和lambda表達式來創建查詢,以避免硬編碼的字符串屬性名稱。
也從來就試圖用一個表達式用相同的異常結果:
var criterion = Expression.Where<MyClass>(param => param.Name == "myFilterName");
var result = session.CreateCriteria<MyClass>().Add(criterion).List<MyClass>();
有人知道我怎麼能指示是MyClass的有屬性映射爲access="field"
標準API?
非常感謝。
謝謝@jbl,我終於用這個鏈接這種方法:HTTP:// stackoverflow.com/questions/13943908/nhibernate-could-not-resolve-property-queryover-only-one-table?answertab=oldest#tab-top
,但需要更改每個hbm.xml文件的所有屬性名稱(在我的案例我爲每個實體使用一個XML文件)。另一種方法是在類聲明中設置只訪問一次:
– Carlos