Hibernate HQL Query:如何使用复合键将Collection设置为Query的命名参数?

时间:2011-10-14 15:10:28

标签: sql hibernate java-ee

给出以下HQL查询:

来自Foo foo,其中foo.id位于(:fooIds)

但是我在Id中有复合键,我们有两个PK1和pk2作为Id。

我们如何实现此查询..

如何在查询

的setparameters函数中传递两个参数

我的问题类似于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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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++;
  }

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