Câu hỏi của bạn thực sự là về cái gì? Việc sử dụng @Repository
chú thích hoặc @Transactional
.
@Repository
hoàn toàn không cần thiết vì giao diện bạn khai báo sẽ được hỗ trợ bởi một proxy mà cơ sở hạ tầng Dữ liệu Mùa xuân tạo và kích hoạt dịch ngoại lệ. Vì vậy, việc sử dụng chú thích này trên giao diện kho lưu trữ Dữ liệu Mùa xuân hoàn toàn không có bất kỳ ảnh hưởng nào.
@Transactional
- đối với mô-đun JPA, chúng tôi có chú thích này trên lớp triển khai hỗ trợ proxy ( SimpleJpaRepository
). Điều này là vì hai lý do: thứ nhất, việc duy trì và xóa các đối tượng yêu cầu một giao dịch trong JPA. Vì vậy, chúng tôi cần đảm bảo rằng một giao dịch đang chạy, điều này chúng tôi thực hiện bằng cách có chú thích phương thức @Transactional
.
Việc đọc các phương pháp như findAll()
và findOne(…)
đang sử dụng @Transactional(readOnly = true)
không hoàn toàn cần thiết nhưng kích hoạt một số tối ưu hóa trong cơ sở hạ tầng giao dịch (đặt thành FlushMode
để MANUAL
cho phép các nhà cung cấp liên tục có khả năng bỏ qua các kiểm tra bẩn khi đóng EntityManager
). Ngoài ra, cờ được đặt trên Kết nối JDBC cũng là nguyên nhân tối ưu hóa hơn nữa ở cấp độ đó.
Tùy thuộc vào cơ sở dữ liệu bạn sử dụng, nó có thể bỏ qua các khóa bảng hoặc thậm chí từ chối các thao tác ghi mà bạn có thể vô tình kích hoạt. Vì vậy, chúng tôi khuyên bạn nên sử dụng @Transactional(readOnly = true)
cho các phương thức truy vấn mà bạn có thể dễ dàng đạt được việc thêm chú thích đó vào giao diện kho lưu trữ của mình. Đảm bảo rằng bạn thêm đơn giản @Transactional
vào các phương thức thao tác mà bạn có thể đã khai báo hoặc trang trí lại trong giao diện đó.