2011-02-09 39 views
14

Tôi đã cố gắng tìm hiểu mùa xuân và ngủ đông, và tôi đã sử dụng rất nhiều ví dụ trên mạng để đặt cùng một ứng dụng tốt đẹp. Tuy nhiên, tôi nhận ra rằng Spring hỗ trợ quản lý giao dịch. Trong ứng dụng mùa xuân của tôi, tôi chỉ đơn giản là thực hiện bất kỳ cuộc gọi nào tôi muốn, trực tiếp đến ngủ đông. Có một lý do/lợi ích là tại sao mọi người sẽ sử dụng công cụ quản lý giao dịch/db của Spring?Lợi ích của việc sử dụng Quản lý giao dịch Springs và sử dụng hibernate

+1

Bạn đang sử dụng hai giai đoạn cam kết một cơ sở dữ liệu cũng như ở một nơi khác - Sử dụng mùa xuân. hãy chọn cái bạn muốn sử dụng. –

+0

Cam kết hai giai đoạn là gì nếu tôi có thể yêu cầu? –

Trả lời

24

Các lợi thế thực sự là:

  • Lightweight cú pháp khai báo. Hãy so sánh:

    public void saveEmployee(Employee e) { 
        Session s = sf.getCurrentSession();  
        s.getTransaction().begin(); 
        s.save(e);  
        s.getTransaction().commit(); 
    } 
    

    @Transactional 
    public void saveEmployee(Employee e) { 
        sf.getCurrentSession().save(e); 
    } 
    
  • tuyên truyền giao dịch linh hoạt. Hãy tưởng tượng rằng bây giờ bạn cần thực hiện phương thức saveEmployee() này như một phần của một giao dịch phức tạp.Với quản lý giao dịch thủ công, bạn cần phải thay đổi phương thức vì quản lý giao dịch được mã hóa cứng. Với mùa xuân, công tác tuyên truyền giao dịch hoạt động trơn tru:

    @Transactional 
    public void hireEmployee(Employee e) { 
        dao.saveEmployee(e); 
        doOtherStuffInTheSameTransaction(e); 
    } 
    
  • rollback tự động trong trường hợp ngoại lệ

+0

Tôi đoán tôi nên hỏi sau đó, lợi ích của việc sử dụng hibernate với Spring là gì? Liệu Hibernate vẫn mang cái gì đó đến bàn? –

+0

@ John: So với mùa xuân không có Hibernate hoặc Hibernate không có Spring? – axtavt

+0

Tôi đang cố gắng hiểu tại sao một người nào đó thực sự sẽ sử dụng Hibernate nếu họ có Spring. Có vẻ như Hibernate đang mua chúng nhiều. Hoặc có lẽ tôi đang thiếu một cái gì đó. –

8

Các spring's reference doc đề cập đến nó rất rõ ràng

Các Spring Framework cung cấp một trừu tượng phù cho giao dịch quản lý mang lại sự lợi ích sau:

  • Cung cấp một mô hình lập trình nhất quán trên các giao dịch khác nhau Các API như JTA, JDBC, Hibernate, JPA và JDO.
  • Hỗ trợ quản lý giao dịch khai báo.
  • Cung cấp API đơn giản hơn để quản lý giao dịch có lập trình so với một số giao dịch phức tạp API chẳng hạn như JTA.
  • Tích hợp rất tốt với các trừu tượng truy cập dữ liệu khác nhau của Spring.

Cung cấp một mô hình lập trình nhất quán trên các giao dịch khác nhau API như JTA, JDBC, Hibernate, JPA, và JDO.

Giả sử bạn hiện đang sử dụng api hibernate để quản lý giao dịch và đôi khi xuống con đường bạn muốn chuyển sang JDO. Điều này đòi hỏi phải thay đổi mã quản lý giao dịch. Nếu bạn sử dụng Spring thì không có thay đổi.

Hỗ trợ quản lý giao dịch khai báo.

Tương tự như EJB

Cung cấp một API đơn giản cho việc quản lý giao dịch theo chương trình hơn một số giao dịch phức tạp API như JTA.

JTA và JDBC có các API khác nhau để quản lý giao dịch. Spring tóm tắt điều đó bằng cách cung cấp một API thống nhất.

+0

Có nhưng về mặt thực tế, tôi không chắc điều đó có nghĩa là gì. Thực hành tiêu chuẩn có sử dụng quản lý giao dịch của Spring trên Hibernates không? Bạn không thiếu một số lợi ích của việc sử dụng ngủ đông theo cách này? –

+1

@ John Baker - Không, bạn không. Spring's HibernateTransactionManager (không ngạc nhiên) sử dụng các tính năng của các giao dịch của Hibernate, trong khi vẫn duy trì lợi thế của các trừu tượng giao dịch thống nhất của Spring. Nếu bạn đang sử dụng Spring và bạn đang sử dụng các giao dịch, thì bạn nên sử dụng các giao dịch của Spring. – OrangeDog

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