반응형
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);)
}
이 작업은 두 단계로 나눌 수 있습니다.
- 표(예: 임시 표)에 ID 목록 삽입
- 값이 많은 in 문을 이 새(임시) 테이블에서 하위 선택 항목을 사용하여 in 문으로 변경합니다.
언급URL : https://stackoverflow.com/questions/40462110/spring-data-jpa-ora-01795-maximum-number-of-expressions-in-a-list-is-1000
반응형
'IT' 카테고리의 다른 글
일치하는 와일드카드가 엄격하지만 'tx:notation-driven' 요소에 대한 선언을 찾을 수 없습니다. (0) | 2023.08.26 |
---|---|
Numpy를 사용하여 Python에서 TIFF(가져오기, 내보내기) 작업 (0) | 2023.08.26 |
SQLite 데이터베이스를 쿼리할 때 커서를 만들어야 하는 이유는 무엇입니까? (0) | 2023.08.21 |
시작 및 종료 인덱스가 주어지면 C에서 문자열의 일부를 복사하려면 어떻게 해야 합니까? (0) | 2023.08.21 |
PHP와 Ajax를 사용하여 배열을 Javascript로 전달하는 방법은 무엇입니까? (0) | 2023.08.21 |