【问题标题】:Hibernate HQL Query : How to set a Collection as a named parameter of a Query with composite key?Hibernate HQL 查询:如何将集合设置为具有复合键的查询的命名参数?
【发布时间】:2011-12-07 20:30:27
【问题描述】:

给定以下 HQL 查询:

from Foo foo where foo.id in (:fooIds)

但是在这里我在 Id ex 中有复合键,我们有两个 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>

【问题讨论】:

    标签: sql hibernate jakarta-ee


    【解决方案1】:

    我不能 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++;
      }
    

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

    【讨论】:

    • 所以这里你的 foid 将包含两个主键
    【解决方案2】:

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

    【讨论】:

    • Foo 类中有 2 个字段,我们想使用它们进行搜索。复合 ID 没有单独的类
    猜你喜欢
    • 2010-10-08
    • 2013-06-10
    • 1970-01-01
    • 2012-03-18
    • 2017-04-13
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多