2012-05-29 20 views
7

Tôi tình cờ tìm thấy các ví dụ sử dụng cấu trúc này mặc dù tôi không chắc chắn những gì tôi có thể nhận được từ điều này?Tôi nhận được gì từ việc thiết lập TransactionAttributeType.NOT_SUPPORTED

Điều đó có nghĩa là tất cả các câu lệnh chọn trong EJB không quốc tịch phải tuân theo điều này?

@Stateless 
public class EmployeeFacade { 
    @PersistenceContext(unitName="EmployeeService") 
    EntityManager em; 

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
    public List<Department> findAllEmployees() { 
     return em.createQuery("SELECT e FROM Employee e", 
     Employee.class) 
     .getResultList(); 
    } 

Tôi nhận được gì từ điều này?

Cảm ơn.

Trả lời

6

Những gì bạn nhận được là:

  1. cách tương đối chính thức để nói rằng phương pháp của bạn không cần giao dịch (như hậu quả bạn biết ví dụ rằng nó sẽ không gọi kéo dài, hợp nhất hoặc loại bỏ trong EntityManager).
  2. Có thể tối ưu hóa hiệu suất trong một số trường hợp.
    • Không cần tạo/chuyển giao dịch. Theo số Java EE 5 Tutorial: "Vì giao dịch liên quan đến chi phí, thuộc tính này có thể cải thiện hiệu suất".
    • Theo các nguồn khác (ví dụ Pro JPA 2), nó cung cấp khả năng triển khai để không tạo ra được quản lý thực thể (có khả năng hoạt động nặng hơn so với việc tạo các thực thể tách rời ngay).
+1

EntityManager thực hiện truy vấn mà không cần giao dịch bằng cách nào? /bối rối/ –

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