Нужен способ аннотировать методы службы в соответствии с шаблоном репозитория.

Я пытаюсь реорганизовать существующую кодовую базу одного из моих проектов в соответствии с шаблоном репозитория, чтобы сделать проект более пригодным для повторного использования и тестирования.

Я написал службы, репозитории, когда я пытаюсь установить аутентификацию, авторизацию и транзакционную аннотацию на сервисном уровне, я сталкиваюсь с проблемами. Эти аннотации работают только на уровне контроллера, но не на уровне службы, поэтому мне нужен способ аннотировать методы службы. Возможно ли это сделать?

Было бы полезно, если бы кто-нибудь указал мне образцы с использованием шаблона репозитория на платформе Play или лучший способ продолжить.


person Sivakumar    schedule 02.12.2016    source источник


Ответы (1)


Аутентификация и авторизация имеют смысл только по запросу, поэтому их прикрепление к чему-либо, кроме метода контроллера, в любом случае не сработает.

Transactional — это просто вспомогательная аннотация для переноса всего запроса в транзакцию JPA. Обычно рекомендуется все равно делать обертку самостоятельно, так что вам это не нужно. Пример взят из документации:

@Inject
private JPAApi jpaApi;

public void updateSomething() {
    // do something with the entity manager, per instance
    // save, update or query model objects.
    jpaApi.withTransaction(() -> {
        EntityManager em = jpaApi.em();
        Query query = em.createNativeQuery("update people set active = 1 where age > 18");
        query.executeUpdate();
    });
}
person gpgekko    schedule 02.12.2016
comment
Спасибо за ответ. Да, мы можем сделать это так, как вы упомянули, но в некоторых случаях мне нужно, чтобы в моей службе сохранялись серии, которые зависят друг от друга. Например, сначала мы сохраняем родительский элемент, который будет в отдельной транзакции, а следующий дочерний элемент будет другой транзакцией. Если мой дочерний элемент не удается сохранить, он не вернет родительский элемент. В конце концов мне нужен способ обернуть мою службу в одну транзакцию. - person Sivakumar; 02.12.2016