Java 如何在hibernate中对复合id键属性应用筛选器
我试图解决一个与hibernate中的过滤相关的问题,特别是在处理复合Id时 我有一个AttrDesc.hbm.xml文件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-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();