2013-10-31 41 views
9

Dưới đây là dòng chảy của ứng dụng của tôiJPA dữ liệu mùa xuân @transactional

Controller - dịch vụ - kho

Tại lớp dịch vụ chúng tôi có @Transactional chú thích Chúng tôi cũng có jpa:repository cấu hình nơi chúng tôi chỉ định người quản lý tổ chức và TXN giám đốc.

Nghi ngờ của tôi là tôi cảm thấy rằng người quản lý txn được chỉ định trong jpa:repositories được xem xét và không có tác động nào khi chỉ định @Transactional ở lớp dịch vụ. Ví dụ: lớp dịch vụ @Transactional có thể được ánh xạ tới trình quản lý tùy chỉnh txn nơi mà kho lưu trữ được gọi bởi dịch vụ có thể có trình quản lý txn khác. Trong trường hợp đó, nó sẽ không tạo ra một vấn đề?

Ai đó có thể làm rõ chúng tôi có bao giờ cần đặt @Transactional ở lớp dịch vụ khi chúng tôi đang sử dụng kho lưu trữ jpa không?

+4

Giao dịch không được phân định ranh giới ở lớp DAO: một đơn vị công việc thường sẽ sử dụng một số DAO và được dàn xếp theo một phương thức dịch vụ giao dịch duy nhất. Tại sao bạn xác định 2 người quản lý giao dịch khác nhau vì bạn chỉ muốn một người quản lý giao dịch? –

+0

Có ... Bởi vì khi bạn thực hiện nhiều cuộc gọi cơ sở dữ liệu, bạn muốn một giao dịch KHÔNG nhiều. Do đó bạn cần một giao dịch bắt đầu ở cấp độ dịch vụ. –

+0

Đồng ý. Có một vấn đề thiết kế trong việc thực hiện hiện tại. Dịch vụ này gọi các repostories kết nối với hai lược đồ khác nhau (đây là các truy vấn chọn lọc thuần túy và không phải là JTA) .Đó là lý do các kho lưu trữ jpa được cấu hình với các nhà quản lý thực thể khác nhau và trình quản lý txn khác nhau. – lives

Trả lời

18

Xem mục 2.3 của mùa xuân liệu tham khảo:

http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions

phương pháp CRUD trên kho lưu trữ của bạn đang giao dịch theo mặc định. Mặc dù các giao dịch này có thể được định cấu hình theo yêu cầu, thông thường các giao dịch được chỉ định ở lớp Dịch vụ và trong trường hợp đó:

Cấu hình giao dịch tại kho lưu trữ sẽ bị bỏ qua sau đó khi cấu hình giao dịch bên ngoài xác định số thực tế được sử dụng.

Vì vậy, để trả lời cho câu hỏi của bạn, giao dịch có thể (và phải) được chỉ định ở cấp dịch vụ bất kể bất kỳ quản lý giao dịch Mùa xuân dữ liệu nào.

+0

Cảm ơn - đó là một thông tin rất hữu ích. Tôi sẽ kiểm tra lại ở chế độ gỡ lỗi và xác minh ở trên. – lives

+1

Tôi quan sát thấy máy đánh chặn giao dịch tại Kho lưu trữ không sử dụng transactionManager bắt đầu bởi lớp dịch vụ .Một proxy kho lưu trữ, tìm kiếm được thực hiện để xác định một bean theo tên "transactionManager" và đang được sử dụng. Có bất kỳ sự định cư nào được thực hiện nếu chúng ta muốn dữ liệu jpa mùa xuân là một phần của giao dịch được bắt đầu bởi tầng dịch vụ – lives

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