Про що насправді ваше запитання? Використання @Repositoryанотації або @Transactional.
@Repositoryвзагалі не потрібен, оскільки заявлений вами інтерфейс буде підтримуватися проксі-сервером, який інфраструктура Spring Data створює та активує переклад винятків для того чи іншого. Отже, використання цієї анотації на інтерфейсі сховища Spring Data взагалі не впливає.
@Transactional- для модуля JPA ми маємо цю анотацію щодо класу реалізації, що підтримує проксі ( SimpleJpaRepository). Це з двох причин: по-перше, для збереження та видалення об’єктів потрібна транзакція в JPA. Таким чином, нам потрібно переконатись, що транзакція запущена, що ми робимо, додаючи метод до анотованих @Transactional.
Читання методів , як findAll()і findOne(…)використовує @Transactional(readOnly = true), не є строго необхідним , але викликає кілька оптимізацій в інфраструктурі транзакції (встановивши FlushModeдля MANUALдозволити живучості постачальників потенційно пропустити брудні перевірки при закритті EntityManager). Крім того, прапор встановлений на підключенні JDBC, що також викликає подальші оптимізації на цьому рівні.
Залежно від того, яку базу даних ви використовуєте, вона може пропустити блокування таблиці або навіть відхилити операції запису, які можуть виникнути випадково. Таким чином, ми рекомендуємо використовувати і @Transactional(readOnly = true)для методів запитів, яких можна легко досягти, додавши цю анотацію до інтерфейсу сховища. Переконайтеся, що ви додали рівнину @Transactionalдо методів маніпулювання, які ви могли б оголосити або переоформити в цьому інтерфейсі.