java - 复合键的 Hibernate 标准问题

标签 java hibernate spring composite

我得到了这个 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);

关于java - 复合键的 Hibernate 标准问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120852/

相关文章:

java - 条件 log4j.xml 模式

java - 使用java中的http header 在spring security中传递基本身份验证详细信息

java - 为什么 Eclipse 不能导出类​​路径中包含的 Maven 库?

spring oauth2 授权代码流程,VK(Vkontakte)的配置

java - Spring Security,始终重定向到登录页面

Java - 修改二进制序列化对象的serialVersionUID

java - 如何使用Java远程创建Hadoop文件系统的实例?

java - JPA存储库org.hibernate.LazyInitializationException : could not initialize proxy - no Session

java - 不标记事务划分,只是通过session加载一个实体

java - 使用@ControllerAdvice 测试@RestController