Как я могу совершить игру! JPA транзакция вручную?
Обычно, играйте! совершает транзакцию после успешного завершения запроса.
Каков правильный способ совершения транзакции вручную в Play?
void addPerson() {
Person p = new Person("John", "Doe");
p.save();
// TODO - commit the transaction
// Now p should have an ID
assert p.id != null;
usePersonIdForSomethingNasty(p.id);
}
Ответы
Ответ 1
Вы можете получить Hibernate EntityManager, вызвав JPA.em(). Затем оттуда вы получаете доступ к транзакции (JPA.em(). GetTransaction()).
Если вы намерены самостоятельно управлять транзакцией, вам нужно отключить Play! обработки транзакций (для этого может использоваться аннотация @NoTransaction, которую вы можете использовать для этого метода или контроллера). В противном случае, играйте! попытается выполнить транзакцию в конце запроса в любом случае, и если вы уже сделали это самостоятельно, это вызовет исключение.
Ответ 2
Вам ничего не нужно делать. После того, как запрос завершится без каких-либо исключений, транзакция будет совершена для вас.
Просто убедитесь, что вы вызываете "сохранить" для всех объектов, которые вы хотите сохранить в конце транзакции.