java spring-data-jpa:ORA-01795:列表中表达式的最大数量为1000

pxq42qpu  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(146)

我正在使用Spring Data JPA。我想从List<String> clientIdList获取 client.id的交易。问题是我传递了一个非常大的列表,我得到了一个ORA-01795错误。

  1. @Query(value = "SELECT TransactRepViewModel FROM TransactRepViewModel a WHERE a.clientId IN (?1) AND a.clDate BETWEEN ?2 and ?3", nativeQuery = true)
  2. List<TransactRepViewModel> findByClientIdList(List<String> clientIdList, Date startDate, Date endDate) throws DataAccessException;

字符串
我的客户端列表来自另一个表从另一个数据库通过甲骨文,我想不出一种方法来解决这个问题.
编辑:这个列表是动态的,所以它可以返回不同数量的id。我也不能在这些数据库中创建任何额外的表。我没有这样的特权。

e5nszbig

e5nszbig1#

您可以将clientID列表划分为999个元素的列表,并对DB进行多次调用。您可以使用Apache Commons ListUtils进行分区:

  1. List<TransactRepViewModel> result = new ArrayList<TransactRepViewModel>();
  2. final List<List<String>> partitions = ListUtils.partition(clientIdList, 999);
  3. for (List<String> partition : partitions) {
  4. result.addAll(yourRepo.findByClientIdList(partition, startDate, endDate);)
  5. }

字符串

mfuanj7w

mfuanj7w2#

您可以将此操作分为两个步骤:
1.将您的ID列表插入到表中(例如临时表)
1.在这个新的(临时的)表上,将你的包含很多值的in语句修改为一个包含子选择的in语句。

相关问题