2010-06-20 33 views
14

Tiêu đề cho biết tất cả: Sự khác nhau giữa số UserTransaction và số EntityTransaction là gì?Sự khác biệt giữa UserTransaction và EntityTransaction

Sự hiểu biết sơ bộ của tôi là UserTransaction được sử dụng khi yêu cầu JTA (ví dụ: truy vấn trên những thứ khác) và EntityTransaction chỉ được sử dụng khi yêu cầu JPA (ví dụ: khi truy vấn là nguyên tử).

Đó có phải là sự khác biệt duy nhất giữa hai hoặc nhiều hơn thế không?

+0

thể trùng lặp của ([chênh lệch giữa @Resource UserTransaction và EntityManager.getTransaction() là gì] http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-usertransaction-and-entitymanager-gettransac) – ewernli

+1

@ewernli: Đó là một chút không công bằng, tôi muốn ly biết rằng câu hỏi đó là một bản sao nếu tôi đã biết câu trả lời cho câu hỏi ở nơi đầu tiên! Cả câu hỏi lẫn câu trả lời đều không nhắc đến 'EntityTransaction' - tôi đã tìm kiếm trước khi hỏi. – bguiz

+7

Tôi hoàn toàn hiểu điều đó. Đó cũng là lý do tại sao tôi dành thời gian để trả lời câu hỏi của bạn tốt nhất có thể. Nó chỉ là một thực tế phổ biến trên SO để chỉ ra có thể trùng lặp để mọi người có thể đọc câu trả lời cho cả hai câu hỏi, nó cải thiện chất lượng của SO. Nó không phải là một phê phán hay bất cứ điều gì.Câu hỏi đặt ra là "đóng bản sao chính xác" chỉ khi có 5 phiếu đánh dấu như vậy. – ewernli

Trả lời

20

hiểu biết sơ đẳng của tôi là UserTransaction được sử dụng khi JTA là yêu cầu (ví dụ như để làm các truy vấn trên điều mulitple), và rằng EntityTransaction được sử dụng khi JPA chỉ được yêu cầu (ví dụ như khi truy vấn là nguyên tử).

Về cơ bản là đúng, nhưng mô tả của bạn về "nhiều thứ" và "nguyên tử" hơi lạ. JTA cho phép người phát triển sử dụng giao dịch phân tán để thực hiện các thay đổi về tài nguyên bội số (cơ sở dữ liệu, nhà môi giới JMS, v.v.) nguyên tử (tất cả hoặc không có gì). Nếu chỉ có một tài nguyên được truy cập (ví dụ: một cơ sở dữ liệu), bạn không cần JTA, nhưng giao dịch vẫn là nguyên tử (tất cả hoặc không có gì). Đó là ví dụ trường hợp khi bạn sử dụng một giao dịch JDBC thông thường trên một cơ sở dữ liệu.

Xét UserTransaction vs EntityTransaction:

  • Nếu JPA là sử dụng độc lập, bạn sử dụng EntityTransaction để phân ranh giới giao dịch cho mình.
  • Nếu JPA được sử dụng trong môi trường được quản lý nơi JPA được tích hợp với JTA, bạn sử dụng UserTransaction. Các EntityManager móc chính nó vào người quản lý giao dịch phân phối JTA. Sự tinh tế duy nhất mà tôi biết là xem xét việc xóa các thay đổi. Khi sử dụng EntityTransaction, JPA biết rằng cần phải xóa các thay đổi. Nếu giao dịch được kiểm soát bằng cách sử dụng UserTransaction, nó cần phải đăng ký gọi lại bằng cách sử dụng JTA registerSynchronization, để các thay đổi được chuyển sang cơ sở dữ liệu trước khi giao dịch hoàn tất. Nếu bạn sử dụng EJB với CMT (giao dịch quản lý vùng chứa), bạn thậm chí không cần sử dụng UserTransaction: máy chủ ứng dụng bắt đầu và dừng giao dịch cho bạn.

câu hỏi liên quan:

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