Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Hibernacja + ograniczenie klauzuli Oracle IN, jak to rozwiązać?

Po pierwsze, fakt, że musisz przekazać więcej niż 2000 identyfikatorów (sądząc po pierwszym punkcie) do zapytania, jest sam w sobie dzwonkiem ostrzegawczym. Być może istnieje lepszy sposób rozwiązania podstawowego problemu.

Możesz użyć podejścia nr 2 i posortować każdą listę, a następnie przeprowadzić sortowanie przez scalanie w aplikacji. Będzie to wymagało dodatkowego kodu, ale prawdopodobnie (zakładając, że rzeczywiste zapytanie jest stosunkowo szybkie) będzie działać lepiej niż podejście nr 3.

W przypadku #3 istnieją 2 duże wady radzenia sobie z tabelami tymczasowymi:

  • podczas gdy Hibernate je obsługuje (spójrz na Table.sqlTemporaryTableCreateString metoda, używa wielu metod pomocniczych w Dialect klasy), są używane wewnętrznie i będą wymagać dodatkowego kodowania z Twojej strony, aby były dostępne z aplikacji.
  • Co ważniejsze, użycie tabeli tymczasowej zmusi Cię do napisania zapytania jako natywnego SQL (ponieważ nie będzie ono mapowane). Jeśli używasz Criteria API, będziesz musiał użyć sqlRestriction z podzapytaniem.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kursor Oracle do przypisania

  2. Zewnętrzna pomoc w wyroczni

  3. Konwertuj serię wartości liczbowych w tekście w Oracle SQL Query

  4. Oracle:jaka jest sytuacja, aby użyć RAISE_APPLICATION_ERROR?

  5. Błąd nieprawidłowego identyfikatora dla v_MONTH w zapytaniu dynamicznym