Сохранение многих сущностей в GAE с помощью JPA

Я использую JPA с Google App Engine. m, используя JPA с Google App Engine. Скажем, у меня есть очень простой @Entity, состоящий из ключа и строки, не более того. Теперь я создаю 10000 таких сущностей, помещаю их в список и теперь хочу ...

Я использую JPA с Google App Engine. m, используя JPA с Google App Engine. Скажем, у меня есть очень простой @Entity, состоящий из ключа и строки, не более того. Теперь я создаю 10000 таких сущностей, помещаю их в список и теперь хочу ...

Я использую JPA с Google App Engine. Скажем, у меня есть очень простой @Entity, состоящий из ключа и строки, не более того. Теперь я создаю 10000 таких объектов, помещаю их в список и хочу сохранить их все.

Если я попытаюсь использовать EntityManager em и цикл for, чтобы пройти через Список всех моих сущностей ...

for(MyEntity entity : listOfAllEntities) {
 em.persist(entity);
}

.. Я получу исключение IllegalArgumentException:

java.lang.IllegalArgumentException: не может работать с несколькими группами сущностей в одной транзакции.

Что касается Я понимаю, мне нужно закрыть и снова открыть EntityManager для каждого вызова persist (). Конечно, на это уходит очень много времени. Я пытаюсь запустить задачу раз в день, которая перезагружает все сущности. Согласно политике GAE, у задачи есть тайм-аут 30 секунд.

Таким образом, альтернативой является сохранение только 500 объектов за раз и выполнение задачи несколько раз, что, на мой взгляд, сложнее, чем должно быть.

Это единственный способ достичь того, что я пытаюсь сделать или мне что-то здесь не хватает?

Решение: Все ответы указывают в одном направлении. Я просто создал отношение «один ко многим», создав «фиктивную родительскую» сущность. В моем случае мне действительно не нужны родители, и в реальном мире это не имеет особого смысла, так сказать. Но после установки этой фиктивной сущности в качестве родительской для каждой из дочерних сущностей я могу сохранить их точно так же, как и раньше, не слишком заботясь о транзакциях. Спасибо всем.

6
задан pgruetter 23 November 2010 в 21:17
поделиться