1

我使用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?

非常感謝。

回答

1

不確定你想要達到什麼,擁有班級代碼可能會有所幫助。

不管怎樣,從你提供了什麼,我猜的映射應該是:

<property name="Name" access="field.camelcase">

看到http://www.nhforge.org/doc/nh/en/#mapping-declaration-property

+1

謝謝@jbl,我終於用這個鏈接這種方法:HTTP:// stackoverflow.com/questions/13943908/nhibernate-could-not-resolve-property-queryover-only-one-table?answertab=oldest#tab-top
,但需要更改每個hbm.xml文件的所有屬性名稱(在我的案例我爲每個實體使用一個XML文件)。另一種方法是在類聲明中設置只訪問一次:

Carlos