Spring Data - JPA Repository - 查询中的参数太多

时间:2016-07-06 15:48:08

标签: postgresql spring-data

我正在使用Spring Data Repositories操作PostreSQL数据库中的数据。

在我的一个存储库中,我有一个非常简单的查询:

@Query(value = "FROM MyEntity entity WHERE entity.entityId IN (:entityIds)")
Collection<MyEntity> getEntitiesByIds(@Param("entityIds") Collection<Long> entityIds);

问题是,当我传入一个超过32k~id的集合时,此查询会抛出以下错误:

java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 70324

我做了一些研究,发现这个错误发生是因为postgresql jdbc驱动程序有32k的限制〜你可以传入查询的参数。所以我有两个选择:

  1. 批量执行查询。在这一点上,我认为这是我最好的镜头,但我希望找到一个解决方案,这样我就可以在一次数据库调用中拉出我的行。

  2. 使用id构建一个临时表,然后将其连接到MyEntity表,但我又遇到了同样的原始问题。对于这种方法,我正在考虑使用所有连接的id传递一个String,然后使用本机查询来提取信息,但它没有按预期工作:

    @Query(value = ";WITH cteAllEntityIds(entity_id) AS( " +
                "VALUES (?1)) " +
                "SELECT p.* FROM my_entity e " +
                "JOIN cteAllEntityIds cte ON e.entity_id = cte.entity_id", nativeQuery = true)
    

    Collection<ProfileViewEntity> getProfilesByIds(String profileIds);

  3. 当然,我传入的参数是String,而entity_id是数据库中的数字。

    你知道如何完成方法#2吗?如何动态构建查询并让jpa以这种方式解释它?

    你知道更好的解决方案吗?

    欢迎任何建议。

    感谢。

0 个答案:

没有答案