spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000


Deniss M .:

Ich verwende Spring Data JPA. Ich möchte die Transaktionen von client.id von a List<String> clientIdList. Das Problem ist, dass ich eine sehr große Liste übergebe und einen ORA-01795-Fehler zurückerhalte.

@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;

Meine Kundenliste stammt aus einer anderen Tabelle aus einer anderen Datenbank über Oracle, und ich kann mir keine Möglichkeit vorstellen, dieses Problem zu lösen ...

Bearbeiten: Die Liste ist dynamisch, sodass unterschiedliche Mengen an IDs zurückgegeben werden können. Ich kann auch keine zusätzlichen Tabellen in diesen Datenbanken erstellen. Ich habe keine solchen Privilegien.

Robert Niestroj:

Sie können Ihre Liste der Client-IDs in eine Liste mit 999 Elementen aufteilen und die Datenbank mehrfach aufrufen. Sie können Apache Commons ListUtils verwenden, um die Partitionierung durchzuführen :

  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);)
  }

Verwandte Artikel


Maximale Anzahl von Threads in einer JVM?

Craig Locke: Wie viele Threads können maximal von der virtuellen Java-Maschine verwaltet werden? Ich habe dies in meiner ursprünglichen Frage nicht erklärt, aber ich versuche, die JVM zu bewerten, und möchte versuchen, herauszufinden, wie viele Threads gleichz

Mit einer kleinen Anzahl von Operatoren ein Los ausdrücken

Davypough In seinem Buch On Lisp betont Paul Graham, dass Lisp „die erweiterbare Sprache“ ist. Er sagt, dies bedeutet, zunehmend höhere Sprachschnittstellen zu einer Sprache aufzubauen, in der eine Anwendung sinnvoll diskutiert oder analysiert werden kann. Die

Maximale Anzahl von Funktionen in einer einzelnen Zelle

StormsEdge Wenn ich versuche, der folgenden Formel einige Formatierungsfunktionen hinzuzufügen, wird eine Fehlermeldung angezeigt, dass Sie zu viele Argumente für diese Funktion eingegeben haben. Ich versuche jedoch lediglich, eine Textfunktion für Formatierun

Finden Sie die maximale Anzahl einer Schleife

Arhan Banerjee Ich möchte nur den Maximalwert berechnen und ausgeben, wenn ein Benutzer ihn eingibt. Ich stecke fest und würde mich über jede Hilfe freuen. BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); int totalnum, number, num1

Die maximale Löschrate von Firebase beträgt nur 10

derEntwickler123 Ich entwickle eine App, bei der, wenn ein Benutzer sein Konto löscht, auch andere seiner Elemente gelöscht werden, aber Firebase lässt das Löschen nur 10 Mal zu. Wie überwinde ich das? Das Löschen erfolgt nur bei this.MyReviewsarray.foreach un