2011-05-25 71 views
3

我得到这个Hibernate映射: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吗?如果我尝试在标准的“数据”属性上使用子标准,我似乎无法在“标识”子标准中获得PK。

任何想法为什么会发生这种情况?

回答

12

不知道你的具体类的结构,但尝试添加ID这种方式,而不是单独的标准:

Restrictions.eq("id.productTerm", productTerm); 
Restrictions.eq("id.productCoverage", productCoverage); 
+0

也做到了,非常感谢你! – Dytut 2011-05-25 07:42:54

+0

不错的工作。花了整整一个早上试图解决这个问题。这在jboss Hibernate文档中有记录吗? – Hector 2014-07-15 11:07:52