一尘不染

组合键的休眠准则问题

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吗?如果我尝试在“数据”属性上使用一个子条件,则该条件有效,我似乎无法在“
id”子条件上获得PK。

有什么想法为什么会这样?


阅读 254

收藏
2020-06-20

共1个答案

一尘不染

不确定您的特定类结构,但是尝试以这种方式添加id而不是单独的条件:

Restrictions.eq("id.productTerm", productTerm);
Restrictions.eq("id.productCoverage", productCoverage);
2020-06-20