Right: desidero eliminare (ad esempio) 1.000.000 record da un database. Questo richiede molto tempo -> la transazione è scaduta e fallisce. Quindi - li cancello in batch dicono 25000 record per transazione. Utilizzo della clausola limite su MySQL o ROWNUM su Oracle. Ottimo questo funziona.Eliminazione/eliminazione batch di record tramite Java ORM
Voglio farlo in un modo indipendente dal database. E da una base di codice Java esistente che utilizza JPA/Hibernate.
Sfortunato. JPA Query.setMaxResults e setFirstResult non hanno effetto per scrivere 'query' (ad es. Cancellare). Selezionare molte entità in memoria per eliminarle singolarmente è molto lento e stupido direi.
Quindi uso una query nativa e gestisco la clausola 'limite' nel codice dell'applicazione. Sarebbe bello incapsulare questa clausola in orm.xml ma ... "Hibernate Annotations 3.2 non supporta l'aggiornamento/eliminazione di massa utilizzando query native." - http://opensource.atlassian.com/projects/hibernate/browse/ANN-469.
Immagino che questo sia un problema comune. Qualcuno ha una migliore soluzione indipendente dal database?
Penso che chi fa la domanda lo stia già facendo, ma trovando che l'eliminazione sia così lenta, scade. –