Про що насправді ваше запитання? Використання @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
до методів маніпулювання, які ви могли б оголосити або переоформити в цьому інтерфейсі.