Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate中对复合id键属性应用筛选器_Java_Hibernate_Hibernate Filters - Fatal编程技术网

Java 如何在hibernate中对复合id键属性应用筛选器

Java 如何在hibernate中对复合id键属性应用筛选器,java,hibernate,hibernate-filters,Java,Hibernate,Hibernate Filters,我试图解决一个与hibernate中的过滤相关的问题,特别是在处理复合Id时 我有一个AttrDesc.hbm.xml文件 <hibernate-mapping> <class name="AttrDesc" table="ATTRDESC"> <composite-id> <key-property name="attr_id" type="long"/> <key-p

我试图解决一个与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>
注意:如果我将language_id从复合id中移出,那么这是可行的


非常感谢您的帮助,感谢Hibernate jpa 2.1及更高版本。您应该稍微修改一下映射

<composite-id name="attrDescId" class="AttrDescId">
    <key-property name="attr_id" type="long"/>
    <key-property name="language_id"/>
</composite-id>
然后使用
root.get(“attrDescId”).get(“language\u id”)
您将能够在
language\u 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();
CriteriaBuilder=sessionFactory.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(AttrDesc.class);
Root=query.from(AttrDesc.class);
query.select(root).where(builder.equal(root.get(“attrDescId”).get(“language_id”),“过滤器值”);
Query q=sessionFactory.getCurrentSession().createQuery(查询);
List attrDescList=q.getResultList();

这里只是猜测,但是如果您使用
并使用条件
id.language\u id=:langid
?我试过了,没有真正的帮助
public class AttrDesc {
    AttrDescId id;
    String name;
    //other fields
}
public class AttrDescId {
    long attr_id;
    String 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();