【问题标题】:HQL How to query Table with List of Objects as a set of conditions?HQL如何以对象列表为一组条件查询表?
【发布时间】:2020-04-06 12:29:55
【问题描述】:

我有一个名为 form 的类

Class Form {
    String id;
    String version;
    String minVersion;  
}

现在我有一个List<Form>。 我必须查询一个满足条件的表,使得 id、version、type all as a set 满足即。我想从我的列表中找到与表中完全相同的所有 {id, version, minVersion}。例如

我有一张这样的桌子

+----+---------+------------+---------+ |编号 |版本 |最小版本 |通道 | +----+---------+------------+---------+ | 1 | 2 | 2 |嗨 | | 1 | 3 | 1 |你好 | | 2 | 2 | 2 |嗨 | | 3 | 3 | 3 |嗨 | +----+---------+------------+---------+

我想从列表中选择 2 行:{id: 1, version: 3, minVersion: 1} 和 {id: 2, version: 2, minVersion: 2}

我写了一个这样的查询,

SELECT id, version, type, passage FROM Content WHERE (id, version, type) IN (:id, :version, :minVersion);

但是如何转换成HSQL并为它设置参数呢?

【问题讨论】:

  • 你使用spring jpa吗?
  • 是的,这对这里有帮助吗? HSQL 命令给了我一个例外@SternK

标签: java hibernate hql


【解决方案1】:

建议如果您的表很小,请获取特定于 ids 的所有元素并在 java 层中进行过滤

请在您的查询和 setParameterList API 中使用 IN 语法。

例如:

String hql = " SELECT id, version, type, paragraph FROM Content WHERE id in (:ids) "

在形成查询时使用

Query query = session.createQuery(hql);
query.setParameterList("ids", idList);

Refer this

【讨论】:

  • id 不会是唯一的。 id、version、minVersion 的组合将是唯一的。我想查询一组值 {id, verion, minVersion}
  • 好的,你现在已经编辑了你的问题,你可以试试这个逻辑stackoverflow.com/questions/49654259/…
  • @ChandramowliJ 如果你的表很小,你可以这样做在java层获取所有元素并过滤
【解决方案2】:

试试这个:

List<Form> findByIdInAndVersionInAndMinVersionIn(List<String> ids, List<String> versions, List<String> minVersions);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2014-10-29
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多