1

我在使用 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"

非常感谢帮助。

4

1 回答 1

1

不确定您想要实现什么,拥有类代码可能会有所帮助。

无论如何,根据您提供的内容,我猜映射应该是:

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

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

于 2013-04-02T15:07:58.213 回答