2011-05-25 105 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