Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hibernate + Oracle IN-Klauselbeschränkung, wie kann man sie lösen?

Erstens ist die Tatsache, dass Sie mehr als 2000 IDs (nach Ihrem ersten Punkt zu urteilen) an eine Abfrage übergeben müssen, eine Warnglocke an und für sich. Vielleicht gibt es einen besseren Weg, das zugrunde liegende Problem zu lösen.

Sie können Ansatz Nr. 2 verwenden und jede Liste sortieren und dann Mergesort innerhalb der Anwendung durchführen. Das erfordert zusätzlichen Code, wird aber wahrscheinlich (vorausgesetzt, die tatsächliche Abfrage ist relativ schnell) eine bessere Leistung erbringen als Ansatz Nr. 3.

Für Nr. 3 gibt es zwei große Nachteile beim Umgang mit temporären Tabellen:

  • während Hibernate sie unterstützt (siehe Table.sqlTemporaryTableCreateString -Methode verwendet sie eine Reihe unterstützender Methoden im Dialect Klasse), werden sie intern verwendet und erfordern eine zusätzliche Codierung Ihrerseits, um über die App zugänglich zu sein.
  • Noch wichtiger ist, dass die Verwendung einer temporären Tabelle Sie dazu zwingt, Ihre Abfrage als natives SQL zu schreiben (da sie nicht zugeordnet wird). Wenn Sie die Kriterien-API verwenden, müssen Sie sqlRestriction verwenden mit einer Unterabfrage.