Estoy usando JPA con Google App Engine. Digamos que tengo una @Entidad muy simple que consiste en una clave y una cadena, nada más. Ahora creo 10000 de estas entidades, las pongo en una lista y ahora quiero almacenarlas todas.Guardando muchas entidades en GAE con JPA
Si trato de usar un EntityManager em y un bucle for para recorrer la lista de todos mis entidades ...
for(MyEntity entity : listOfAllEntities) {
em.persist(entity);
}
.. voy a tener una IllegalArgumentException:
java.lang.IllegalArgumentException: no puede operar en múltiples grupos de entidades en una sola transacción.
Por lo que tengo entendido, tengo que cerrar y volver a abrir el EntityManager para cada llamada persist(). Por supuesto, esto consume mucho tiempo. Estoy tratando de ejecutar una tarea una vez al día que vuelva a cargar todas las entidades. De acuerdo con la política de GAE, la tarea tiene un tiempo de espera de 30 segundos.
Así que una alternativa es guardar solo 500 entidades a la vez y ejecutar la tarea varias veces, lo que creo que es más complicado de lo que debe ser.
¿Es esta la única manera de lograr lo que estoy tratando de hacer o me falta algo aquí?
Solución: Todas las respuestas apuntan en la misma dirección. Simplemente creé una relación One-To-Many creando una entidad "padre ficticio". Realmente no necesito un padre en mi caso y no tiene mucho sentido en el mundo real, por así decirlo. Pero después de configurar esta entidad ficticia como padre de cada una de las entidades secundarias, puedo guardarlas exactamente como lo hice antes sin preocuparme demasiado por las transacciones. Gracias a todos.
Wow eso es extraño. Buena pregunta y respuesta –
[Lea la respuesta a esta pregunta similar] (http://stackoverflow.com/questions/2323777/google-app-engine-cant-operate-on-multiple-entity-groups-in-a-single-transacti). Parece el mismo problema que estás teniendo. –
Sí, esa era mi pregunta. Lo arreglé agregando una entidad padre y luego teniendo una relación uno a varios propiedad de modo que estaban en el mismo grupo de entidades. –