具有access =“field”映射的Hibernate Criteria API

时间:2013-04-02 08:03:56

标签: nhibernate nhibernate-mapping nhibernate-criteria hbmxml

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

非常感谢。

1 个答案:

答案 0 :(得分:1)

不确定要实现的目标,让类代码可能会有所帮助。

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

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

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