sql >> Databáze >  >> RDS >> Oracle

Hibernate + omezení klauzule Oracle IN, jak to vyřešit?

Za prvé, skutečnost, že potřebujete předat více než 2000 id (soudě podle vašeho 1. bodu) dotazu, je sama o sobě varovným zvonkem. Možná existuje lepší způsob, jak vyřešit základní problém.

Můžete použít přístup č. 2 a seřadit každý seznam a poté provést mergesort v rámci aplikace. To bude vyžadovat další kód, ale pravděpodobně (za předpokladu, že skutečný dotaz je relativně rychlý) bude fungovat lépe než přístup #3.

Pro číslo 3 existují 2 velké nevýhody práce s dočasnými tabulkami:

  • i když je Hibernate podporuje (podívejte se na Table.sqlTemporaryTableCreateString používá spoustu podpůrných metod v Dialect třídy), jsou používány interně a budou vyžadovat další kódování z vaší strany, aby byly přístupné z aplikace.
  • ještě důležitější je, že použití dočasné tabulky vás donutí napsat dotaz jako nativní SQL (protože nebude mapován). Pokud používáte Criteria API, budete muset použít sqlRestriction s dílčím dotazem.


  1. Při volání DB::vyberte, proč se mi zobrazuje zpráva Připojení bylo resetováno?

  2. mySQL Trigger funguje po vložení konzoly, ale ne po vložení skriptu

  3. Jak vybrat více než 1 záznam za den?

  4. Rozdíl mezi aktuálním a předchozím časovým razítkem