我得到了这个hibernate映射:
<class name="CoverageTerm" table="coverage_term"> <composite-id name="id" class="CoverageTermPK"> <key-many-to-one name="productTerm" class="ProductTerm"> <column name="termtype_id"></column> <column name="product_id" ></column> </key-many-to-one> <key-many-to-one name="productCoverage" class="ProductCoverage" column="product_coverage_id"></key-many-to-one> </composite-id> <property name="data"/> </class>
这是一个简单的复合键映射,具有与表productCoverage的关系以及与productterm的复合键。
现在问题出在我的搜索功能中:
public CoverageTerm getCoverageTermFromProductTermCoverage(ProductTerm productTerm, ProductCoverage productCoverage) { Criteria critCt = getSession().createCriteria(CoverageTerm.class); Criteria critCtId = critCt.createCriteria("id"); critCtId.add(Restrictions.eq("productTerm", productTerm)); critCtId.add(Restrictions.eq("productCoverage", productCoverage)); return (CoverageTerm) critCt.uniqueResult(); }
这应该让我在“ id”(这是主键CoverageTermPK)上创建一个子条件,并对其添加限制,但是当我运行它时,我得到了错误消息:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.QueryException: could not resolve property: productTerm of: CoverageTerm
这感觉很奇怪,难道不应该在那里得到CoverageTermPK吗?如果我尝试在“数据”属性上使用一个子条件,则该条件有效,我似乎无法在“ id”子条件上获得PK。
有什么想法为什么会这样?
不确定您的特定类结构,但是尝试以这种方式添加id而不是单独的条件:
Restrictions.eq("id.productTerm", productTerm); Restrictions.eq("id.productCoverage", productCoverage);