【发布时间】:2013-04-02 08:03:56
【问题描述】:
我在使用 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 属性名)
MyClass.hbm.xml 文件有这种方式映射的属性:
<property name="name" access="field">
<column name="NAME" length="50" not-null="true" />
</property>
我认为问题的出现是因为 hibernate 无法访问 MyClass 的属性“Name”,因为它与 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"?
帮助非常感谢。
【问题讨论】:
标签: nhibernate nhibernate-mapping nhibernate-criteria hbmxml