2011-10-14 97 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