首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在hibernate中对复合id键属性应用过滤器

如何在hibernate中对复合id键属性应用过滤器
EN

Stack Overflow用户
提问于 2017-02-26 12:26:55
回答 1查看 343关注 0票数 1

我正在尝试解决hibernate中与过滤相关的问题,特别是在处理复合Id时

我有一台AttrDesc.hbm.xml

<hibernate-mapping>
    <class name="AttrDesc" table="ATTRDESC">
        <composite-id>
            <key-property name="attr_id" type="long"/>
            <key-property name="language_id"/>
        </composite-id>
        <property name="attrtype_id"/>
        <property name="name"/>
        <property name="description"/>
        <property name="description2"/>
        <property name="field1"/>
        <property name="groupname"/>
        <property name="qtyunit_id"/>
        <property name="noteinfo"/>
        <filter name="langFilter" condition=":langid=language_id"/>
    </class>
     <filter-def name="langFilter">  <filter-param name="langid" type="int"/>   </filter-def>
</hibernate-mapping>

问题:我无法在作为复合id一部分的language_id上应用过滤器

在调试过程中,我发现filter-param langid的值是0,而我使用下面的代码行设置的实际值是-1

session.enableFilter("langFilter").setParameter("langid", -1);

注意:如果我将language_id移出复合id,这将起作用

感谢您的帮助,谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-07-30 02:02:53

对于Hibernate jpa 2.1和更高版本,您应该稍微修改一下映射。

<composite-id name="attrDescId" class="AttrDescId">
    <key-property name="attr_id" type="long"/>
    <key-property name="language_id"/>
</composite-id>

因此,您需要将模型类更改为

public class AttrDesc {
    AttrDescId id;
    String name;
    //other fields
}
public class AttrDescId {
    long attr_id;
    String language_id;
}

然后你就可以在language_id上使用root.get("attrDescId").get("language_id")进行过滤了。精心设计,

CriteriaBuilder builder = sessionFactory.getCriteriaBuilder();
CriteriaQuery<AttrDesc> query = builder.createQuery(AttrDesc.class);
Root<AttrDesc> root = query.from(AttrDesc.class);
query.select(root).where(builder.equal(root.get("attrDescId").get("language_id"), "the filter value"));
Query<AttrDesc> q = sessionFactory.getCurrentSession().createQuery(query);
List<AttrDesc> attrDescList = q.getResultList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42464747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档