derecha - Quiero eliminar (por ejemplo) 1.000.000 registros de una base de datos. Esto lleva mucho tiempo -> la transacción expira y falla. Entonces, los borro en lotes, digamos 25000 registros por transacción. Usando la cláusula de límite en MySQL o ROWNUM en Oracle. Genial, esto funciona.lotes supresión/purga de registros a través de Java ORM
quiero hacer esto de una manera independiente de la base de datos. Y a partir de una base de código Java existente que utiliza JPA/Hibernate.
Fuera de suerte. JPA Query.setMaxResults y setFirstResult no tienen efecto para escribir 'consultas' (por ejemplo, eliminar). Seleccionar muchas entidades en la memoria para eliminarlas individualmente es muy lento y tonto, diría yo.
lo tanto, utilizar una consulta nativa y gestionar la cláusula de 'límite' en el código de la aplicación. Sería bueno para encapsular esta cláusula en orm.xml pero ... "Anotaciones de Hibernate 3.2 no es compatible con actualización masiva/elimina un uso de consultas nativas". - http://opensource.atlassian.com/projects/hibernate/browse/ANN-469.
Me imagino que este es un problema común. ¿Alguien obtuvo una mejor solución independiente de base de datos?
Creo que la pregunta-autor de la pregunta ya lo está haciendo, pero al ver que la eliminación es tan lenta que el tiempo de espera. –