Mám tri zoznamy entít, ktoré sa snažím uložiť do databázy.
celkovo je to asi 1000 entít, ktoré musí vytrvať.
entityRepo.save(EntityList);
Dokončenie však trvá 4-5 minút. - A všimol som si, že robí niektoré výbery pred vložením, predpokladám, že je to hibernácia, špinavá kontrola, či je potrebné aktualizovať alebo vložiť.
Každopádne to zakázať a zvýšiť rýchlosť hibernácie vložiť?
hľadali začervenanie, ale nie ste si istí, ako to urobiť pri ukladaní celého zoznamu naraz?
odpovede:
1 pre odpoveď č. 1Ak sú všetky entity rovnaké, mali by ste zapnúť dávkové vkladanie. Tu je pár článkov, ktoré vám pomôžu začať. Ide predovšetkým o pridanie konfigurácie.
http://memorynotfound.com/hibernate-jpa-batch-insert-batch-update-example/ https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/batch/Batching.html
0 pre odpoveď č. 2
Máte pravdu, keď hovoríte, že špinavá kontrola spôsobuje čítanie z databázy. Ak používate štandardný režim dlhodobého spánku Session
aby ste vytrvali vo svojich entitách, bude ich Hibernate spravovať normálne.
Ak sa tomu chcete vyhnúť, najjednoduchším prístupom je pravdepodobne otvoriť StatelessSession
a používať org.hibernate.StatelessSession.insert
, Toto nevyužíva vyrovnávaciu pamäť prvej úrovne, a preto nie je potrebné špinavé kontrolné entity.
Môžete to dosiahnuť volaním SessionFactory#withStatelessOptions
získať inštanciu StatelessSessionBuilder
, Potom môžete zavolať org.hibernate.StatelessSessionBuilder.openStatelessSession
.