Я пытался реализовать свой собственный метод перехватчиков, используя аннотации (Guice) в Play !. Однако кажется, что эти аннотации будут работать (и, следовательно, перехватывать), если содержащиеся классы создаются Guice (reference). Это подводит меня к вопросу: как @Transactional работает вне классов Controller в Play !? Это, по сути, метод перехватчика, и он отлично работает независимо от того, как создавались классы-классы? Я могу использовать его в своих моделях и классах обслуживания.Как @Transactional работает вне контроллеров в Play! Фреймворк?
2
A
ответ
2
@Transactional не работает вне контроллера. Ваш единственный способ заключается в использовании JPA.withTransaction
Пример:
public Promise<Integer> doWork() {
return promise(() -> jpaApi.withTransaction(() -> {
return JPA.em()
.createNativeQuery("DELETE FROM table WHERE id=1")
.executeUpdate();
}), dbExecutionContext);
}
Или даже без дополнительного контекста исполнения (выполняется в потоке вызывающего абонента):
public Promise<Integer> doWork() {
return jpaApi.withTransaction(() -> {
return JPA.em()
.createNativeQuery("DELETE FROM table WHERE id=1")
.executeUpdate();
});
}
Не забудьте придать play.db .jpa.JPAApi.
Смежные вопросы
- 1. Как создаются веб-страницы в Play! Фреймворк?
- 2. Как собрать html-страницы в Play! фреймворк?
- 3. Как отобразить список элементов в Play! Фреймворк?
- 4. Использование $ http вне контроллеров?
- 5. Как работает Spring @Transactional?
- 6. Как работает @transactional?
- 7. Где разместить @Transactional аннотацию в Play
- 8. Что такое «обратный контроллер» в Play! фреймворк?
- 9. Как определить карту в файле YAML в Play! фреймворк?
- 10. Использование компонентов вне контроллеров в CakePHP
- 11. Play Framework: наличие нескольких контроллеров
- 12. Интеграция с Orbeon с Play! Фреймворк?
- 13. Тестирование инжектированных контроллеров в Play for Scala
- 14. Создание ViewResults вне контроллеров в ASP.NET MVC
- 15. play 2.1.1 фреймворк не перекомпилирует (обновить)
- 16. @transactional rollback не работает
- 17. Как режим без гражданства влияет на безопасность в Play! фреймворк?
- 18. Как обрабатываются асинхронные обратные вызовы в Play! Фреймворк?
- 19. не @Transactional работает
- 20. Spring @Transactional не работает
- 21. Deltaspike @Transactional не работает
- 22. Spring @transactional не работает
- 23. @Transactional не работает в @Service
- 24. @Transactional в @Entity не работает?
- 25. Spring :: @Transactional не работает
- 26. Аннотация @Transactional не работает
- 27. Spring @Transactional не работает
- 28. Почему @Transactional (Propagation.NOT_SUPPORTED) работает не так, как ожидалось?
- 29. Почему «@Transactional (распространение = распространение.NEVER)» работает?
- 30. не @Transactional работать давая исключение добавить @Transactional
К сожалению, @Transactional работает только с действиями контроллера. Любой другой метод, который вы должны обернуть вручную. Этот вопрос может помочь: http://stackoverflow.com/questions/32443032/where-to-place-transactional-annotation-in-play. – Kris
Хм, это совершенно противоречит тому, что я видел. Если я вызываю сервисную процедуру, аннотированную с помощью '@ Transaction', она все равно работает. Означает ли это, что вызов в стеке вызовов, происходящий из любого места в контроллере, может быть аннотирован с помощью '@ Transaction', но любой другой вызывающий, вне контекста контроллера не может? –
Если вы вызываете метод службы изнутри с аннотированным действием @Transactional в контроллере (весь контроллер также может быть аннотирован), тогда он будет работать. Итак, да, если вы вызываете тот же метод обслуживания из другого места, вне вашего аннотированного действия он не будет работать. В документах https://www.playframework.com/documentation/2.4.x/JavaJPA#[email protected] также упоминаются только действия. Это довольно стыдно: Транзакционная аннотация в произвольных методах была бы довольно особенной (это не проблема в Spring Framework). – Kris