Как я могу совершить игру! 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

Вам ничего не нужно делать. После того, как запрос завершится без каких-либо исключений, транзакция будет совершена для вас.

Просто убедитесь, что вы вызываете "сохранить" для всех объектов, которые вы хотите сохранить в конце транзакции.