2011-10-14 55 views
1

给出下面的HQL查询:Hibernate HQL查询:如何将集合设置为具有组合键的查询的命名参数?

从富foo其中foo.id在(:fooIds)

但在这里,我在编号前组合键,我们有两个PK1和PK2为ID的。

我们怎样才能实现这个查询..

我怎样才能在查询setparameters功能同时通过paramets

我的问题是类似的含复合键此question

HBM文件低于目前

<?xml version="1.0"?> 

<composite-id> 
     <key-property name="foo1" column="FOO1" type="java.lang.String" length="36"/> 
     <key-property name="foo2" column="FOO2" type="java.lang.Short" />  
    </composite-id> 

    <property name="EffectiveDt" type="java.sql.Date" column="EFFECTIVE_DT" />    
    <property name="effectiveTypeCd" type="java.lang.String" column="CERT_EFF_TYPE_CD" /> 
    <property name="statusCd" type="java.lang.String" column="CERT_STATUS_CD" /> 


</class> 

回答

0

我不是100%肯定,你可以在这种情况下使用in。有一两件事你可以做的是有一些手工打造的查询关键词,比如

String hqlQuery = "from Foo foo where " 
boolean first = true; 
for(ID id : fooids) { 
    if(first) { 
      hqlQuery += "foo.id = ?"; 
      first = false; 
    } else { 
      hqlQuery += " OR foo.id = ?"; 
    } 
    } 

    Query q = em.createQuery(hqlQuery); 
    int position = 0; 
    for(ID id : fooids) { 
     q.setParameter(position, id); 
     position++; 
    } 

您可能要仔细检查代码,因为我在这里写它,所以有很大的机会,有一个或两个错字。

+0

所以这里你的fooids将包含主键 – Vish

1

您是否使用复合ID?你有一个单独的类代表composite-id,或者你有2个字段在Foo中,并且你想在你的查询中使用它们进行搜索? 发布你Foo类会有所帮助!

+0

我们在Foo类中有2个字段,并且我们希望使用它们进行搜索。复合ID没有单独的类 – Vish