使用Hibernate Criteria API时遇到问题:
var query = session.QueryOver<MyClass>().Where(param => param.Name == "myFilterName").List<MyClass>();
如果运行此语句,则抛出NHibernate.QueryException:
无法解析属性:名称:MyClass
在StackTrace中:
at NHibernate.Persister.Entity.AbstractPropertyMapping.ToType(String propertyName的)
MyClass.hbm.xml文件具有以这种方式映射的属性:
<property name="name" access="field">
<column name="NAME" length="50" not-null="true" />
</property>
我认为问题的出现是因为hibernate无法访问MyClass的属性“Name”,因为它与access="field"
映射,但我无法通过这种方式更改访问属性的应用程序设计要求。
这个想法是通过使用带有lambda表达式的Criteria API来创建查询,以避免硬编码的字符串属性名称。
我也尝试使用具有相同异常结果的Expression:
var criterion = Expression.Where<MyClass>(param => param.Name == "myFilterName");
var result = session.CreateCriteria<MyClass>().Add(criterion).List<MyClass>();
有人知道如何向Criteria API表明MyClass的属性是否映射为access="field"
?
非常感谢。
答案 0 :(得分:1)
不确定要实现的目标,让类代码可能会有所帮助。
无论如何,根据你提供的内容,我猜映射应该是:
<property name="Name" access="field.camelcase">
请参阅http://www.nhforge.org/doc/nh/en/#mapping-declaration-property