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

发布于 2024-12-09 18:28:37 字数 1005 浏览 0 评论 0原文

给定以下 HQL 查询:

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

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

我们如何实现这个查询..

我如何在查询的setparameters函数中传递两个参数

我的问题与此类似问题

包含复合密钥的 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>

Given the following HQL Query:

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

but here i have composite key in the Id ex we have two PK1 and pk2 as Id's.

How can we implement this query..

how can i pass both paramets in setparameters function of query

My question is similar this question

HBM file containing composite key is present below

<?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┾廆蒐ゝ 2024-12-16 18:28:37

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

Are you using a composite id? Do you have a separate class representing the composite-id or do you have 2 fields in Foo and you want to search using them in your query?
Posting you Foo class would help!

愿与i 2024-12-16 18:28:37

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

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

I'm not 100% sure you can use in in this case. One thing you can do is to build the query manually with something like

 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++;
  }

You might want to double check the code, as I'm writing it here, so there's a big chance there's a typo or two.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文