【问题标题】:Java Hibernate - Query with a list as joinJava Hibernate - 使用列表作为连接进行查询
【发布时间】:2020-08-26 02:23:37
【问题描述】:

在 java 代码中我生成了数千个 id,接下来我需要在 postgresql 数据库中获取这些 id,到目前为止我有这个(使用 createNativeQuery 作为伪代码):

            Query q = em.createNativeQuery(
                    "select * from mytable where id in (:ids)"
            ).setParameter("ids", listofIds);

我担心 IN 子句,我担心可能会有大量的值,还有其他更好的方法来执行此操作吗?

【问题讨论】:

  • 要么构建一个获取 id 的子查询,要么分批加载您的记录以减少每个查询处理的数据量。

标签: java sql postgresql hibernate


【解决方案1】:

我认为您可以通过这样做来扩展到相当大的列表

select * from mytable where id = any(cast(:ids as bigint[]))

但你必须首先在 Java 中将 id 列表格式化为字符串,例如

ids = "{" + String.join(",", listofIds) + "}";

尽管如此,列表对于 Java 或 Postgresql 来说总是太大而无法处理,因此总会有一些阈值,因此如果您想支持任意大的列表,则需要将其分成多个批次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多