2014-04-27 26 views
13

Tôi có Dữ liệu mùa xuân CrudRepository này xử lý các hoạt động CRUD trên một DB.Trường hợp ngoại lệ Spring CrudRepository

@Repository 
public interface IUserRepository extends CrudRepository<User, String> { 

} 

User là thực thể của bảng người dùng của DB của tôi. CrudRepository thêm cụ thể là các hoạt động sau đây để kho:

  • delete(String ID)
  • findOne(String ID)
  • save(User user)

Như đã nêu trong documentation thì xóa và tìm các hoạt động ném IllegalArgumentException trong trường hợp id cho là null trong khi hoạt động lưu không ném bất kỳ ngoại lệ nào.

Vấn đề là javadoc của CrudRepository không đề cập đến các trường hợp ngoại lệ khác được ném bởi các hoạt động này. Ví dụ, nó không nói rằng hoạt động delete(String ID) ném một số EmptyResultDataAccessException trong trường hợp ID được cung cấp không tồn tại trong DB.

Trong javadoc của hoạt động save(User user), không rõ trường hợp ngoại lệ nào được ném trong trường hợp bạn chèn Người dùng mới phá vỡ một ràng buộc toàn vẹn dữ liệu (trên các trường duy nhất và khóa ngoài). Hơn nữa nó không cảnh báo bạn cho dù bạn đang viết một người dùng mới hay tồn tại: nó chỉ tạo ra một người dùng mới hoặc ghi đè nếu tồn tại (vì vậy nó là một hoạt động chèn + cập nhật).

Trong ứng dụng doanh nghiệp, tôi có thể nắm bắt mọi ngoại lệ có thể ném mà một hoạt động có thể ném và tôi nên đọc về điều đó trong javadoc của hoạt động.

Bạn có biết bất kỳ tài liệu rõ ràng nào về ngoại lệ CrudRepository không?

Cảm ơn bạn

Trả lời

22

mùa xuân đã được xây dựng trong cơ chế ngoại lệ dịch, do đó tất cả các trường hợp ngoại lệ ném ra bởi các nhà cung cấp kiên trì JPA được chuyển đổi thành Spring DataAccessException - cho tất cả đậu chú thích với @Repository (hoặc cấu hình).

Có bốn nhóm chính -

  • NonTransientDataAccessException - đây là những trường hợp ngoại lệ, nơi một retry của hoạt động tương tự sẽ thất bại trừ khi nguyên nhân của ngoại lệ được sửa chữa. Vì vậy, nếu bạn vượt qua id không tồn tại ví dụ, nó sẽ thất bại trừ khi id tồn tại trong cơ sở dữ liệu.

  • RecoverableDataAccessException - đây là "đối diện" của trang trước - ngoại lệ có thể khôi phục - sau một số bước khôi phục. Chi tiết khác trong tài liệu API

  • ScriptException - Ngoại lệ liên quan đến SQL, khi cố gắng xử lý tập lệnh không đúng ngữ pháp chẳng hạn.

  • TransientDataAccessException - đây là ngoại lệ khi có thể khôi phục mà không có bất kỳ bước rõ ràng nào, ví dụ: khi có thời gian chờ tới cơ sở dữ liệu, bạn sẽ thử lại sau vài giây.

Điều đó nói rằng, nơi lý tưởng để tìm tài liệu về tất cả các trường hợp ngoại lệ - là trong API riêng của mình - chỉ cần đi qua hệ thống các DataAccessException.

+0

Đánh giá cao việc bạn cung cấp liên kết tới tất cả các ngoại lệ và giải thích chi tiết ý nghĩa của các ngoại lệ đó. –

+1

@vtor ý của bạn là "cơ chế dịch ngoại lệ tích hợp". Tôi tò mò tại sao tài liệu hướng dẫn mùa xuân không nói rõ ràng rằng một số phương thức ném DataAccessException này, ví dụ như lưu phương thức của lớp CrudRepository. – fabrik

Các vấn đề liên quan