1

我最近开始使用 Criteria API 的示例组件进行查询,并遇到了一个奇怪的问题 - 尝试执行搜索时抛出 org.hibernate.QueryException。

我的场景如下:

我有一个 A 类,作为它的一个属性,它有一组 B 类实例 (Set<B> listOfBs)。这被映射为 A 中的一对多关系。

我希望在 B 的示例实例上设置条件查询,例如指定属性值为“somevalue”的所有 B,然后应用该条件来查找在其集合中具有此类 B 的所有 A。这是我正在使用(或希望)的代码:

    Criteria aCrit = session.createCriteria(A.class);

    A aExampleInstance = new A();
    Example aExampleCriteria = Example.create(aExampleInstance );

    Criteria bCrit = atCrit.createCriteria("listOfBs");
    B bExampleInstance = new B();
    bExampleInstance .setProperty("somevalue");
    bCrit.add(Example.create(bExampleInstance ));

    List<A> results = aCrit.add(aExampleCriteria).list();

我正在使用 XML 映射,A 将它与 B 的关系映射如下(A.hbm.xml):

   <set name="listOfBs" table="B" inverse="false" cascade="all" lazy="true">
       <key column="A_ID" not-null="true"/>
       <one-to-many class="B"/>
   </set>

我意识到这可能不是正确的方法 - 欢迎任何更好的建议。无论如何,问题在于我得到了一个例外:

org.hibernate.QueryException:无法解析属性:_com of:B

我已经搜索并意识到异常告诉我什么。但是,在我的任何类中都没有声明这样的属性名称——在我看来,这可能是 Hibernate 在后台使用的任何工具的一部分,以使持久性看起来透明。

我很好奇这是否是一个已知问题,是否有人们使用过的解决方法,或者可能是较新版本中的解决方案?我正在使用休眠 3.6.6。

任何建议/经验将不胜感激。

谢谢!

4

1 回答 1

1
 org.hibernate.QueryException: could not resolve property: _com of: B

异常告诉它在 b 中找不到属性 _com

这意味着您的以下代码是错误的。

  B bExampleInstance = new B();
  bExampleInstance .setProperty("somevalue"); 

是属性的名称在 A 和 B 中相同,并且与您设置的相同。

于 2011-11-14T07:35:29.013 回答