我正在使用Spring Data JPA。我想从List<String> clientIdList
获取 client.id的交易。问题是我传递了一个非常大的列表,我得到了一个ORA-01795错误。
@Query(value = "SELECT TransactRepViewModel FROM TransactRepViewModel a WHERE a.clientId IN (?1) AND a.clDate BETWEEN ?2 and ?3", nativeQuery = true)
List<TransactRepViewModel> findByClientIdList(List<String> clientIdList, Date startDate, Date endDate) throws DataAccessException;
字符串
我的客户端列表来自另一个表从另一个数据库通过甲骨文,我想不出一种方法来解决这个问题.
编辑:这个列表是动态的,所以它可以返回不同数量的id。我也不能在这些数据库中创建任何额外的表。我没有这样的特权。
2条答案
按热度按时间e5nszbig1#
您可以将clientID列表划分为999个元素的列表,并对DB进行多次调用。您可以使用Apache Commons ListUtils进行分区:
字符串
mfuanj7w2#
您可以将此操作分为两个步骤:
1.将您的ID列表插入到表中(例如临时表)
1.在这个新的(临时的)表上,将你的包含很多值的in语句修改为一个包含子选择的in语句。