我最近开始使用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在引擎盖下使用的任何仪器的一部分,以使持久性看起来透明。
我很好奇这是否是一个已知问题,是否有人使用过的解决方法,或者是否有较新版本的解决方案?我正在使用Hibernate 3.6.6。
任何建议/经验都将不胜感激。
谢谢!
答案 0 :(得分:1)
org.hibernate.QueryException: could not resolve property: _com of: B
异常告诉它无法在b
中找到属性_com这意味着你的下列代码是错误的。
B bExampleInstance = new B();
bExampleInstance .setProperty("somevalue");
是属性的名称在A和B中是相同的,并且与您设置的相同。