我在使用 Hibernate Criteria API 时遇到问题:
var query = session.QueryOver<MyClass>().Where(param => param.Name == "myFilterName").List<MyClass>();
如果运行此语句,则会抛出 NHibernate.QueryException:
无法解析属性:名称:MyClass
在 StackTrace 中:
在 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 的属性“名称”,因为它是映射的access="field"
,但是由于应用程序设计要求,我无法更改这种访问属性的方式。这个想法是通过使用 Criteria API 和 lambda 表达式来创建查询,以避免硬编码的字符串属性名称。
我也尝试过使用具有相同异常结果的表达式:
var criterion = Expression.Where<MyClass>(param => param.Name == "myFilterName");
var result = session.CreateCriteria<MyClass>().Add(criterion).List<MyClass>();
有人知道我如何向 Criteria API 指示 MyClass 的属性映射为access="field"
?
非常感谢帮助。