IT

spring-data-jpa: ORA-01795: 목록의 최대 식 수는 1000입니다.

itgroup 2023. 8. 21. 21:07
반응형

spring-data-jpa: ORA-01795: 목록의 최대 식 수는 1000입니다.

저는 스프링 데이터 JPA를 사용하고 있습니다.저는 client.id 의 거래를 a로부터 받고 싶습니다.List<String> clientIdList문제는 제가 매우 큰 목록을 통과하고 있는데 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를 반환할 수 있습니다.또한 이러한 데이터베이스에 추가 표를 작성할 수 없습니다.저는 그런 특권이 없습니다.

클라이언트 목록을 분할할 수 있습니다.ID를 999개 요소 목록에 넣고 DB에 여러 번 호출합니다.Apache Commons ListUtils를 사용하여 파티션을 분할할 수 있습니다.

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

이 작업은 두 단계로 나눌 수 있습니다.

  1. 표(예: 임시 표)에 ID 목록 삽입
  2. 값이 많은 in 문을 이 새(임시) 테이블에서 하위 선택 항목을 사용하여 in 문으로 변경합니다.

언급URL : https://stackoverflow.com/questions/40462110/spring-data-jpa-ora-01795-maximum-number-of-expressions-in-a-list-is-1000

반응형