2012-05-30 3 views
1

У меня есть LinkedBlockingQueue, и я хотел бы сохранить все элементы в базе данных. Я знаю, что я могу сохранить его один за другим:Как сохранить список объектов в Play JPA

ObjectModel om = new ObjectModel(); 
om.save(); 

Однако, это означает, что я должен перебрать все элементы и сделать новое соединение для каждого. Можно ли вставить весь список сразу?

+0

Вы можете перебрать все элементы и вызвать save(). Однако это не создаст новое соединение. Транзакции в игре связаны с HTTP-соединением. –

ответ

2

В игре 1.x, когда сервер получает запрос, play/jpa откроет транзакцию для вашей базы данных. Эта транзакция будет автоматически отменена, если что-то пойдет не так, иначе она автоматически завершится, когда ответ будет отправлен клиенту.

Для этого, даже если вы зацикливаете объекты JPA и вызываете save() на них один за другим, все они будут выполняться с тем же соединением в той же транзакции.

Я бы подумал, что это работает так же, как в Play 2, но, честно говоря, я не знаю.

1

Простой ответ не будет НЕТ. Некоторым из них следует выполнить запрос на ввод для всех отдельных объектов.

Вам не нужно создавать новое соединение для каждой вставки. Вы должны создать соединение и вставить огонь в одно и то же соединение на каждой итерации.

+0

Нет JPA-эквивалента вставки нескольких строк сразу в MySQL? Поскольку возможность вставки нескольких строк ускорит запрос намного больше, поскольку они не будут вставлять одну строку за раз. –

0

Возможно, this question доставит вас дальше. Если вы знаете, как делать то, что вы хотите в базовой БД, вы также можете использовать собственный запрос (который вы можете создать через EntityManager), я полагаю.

Смежные вопросы