2014-11-20 18 views
5

Là sinh viên, tôi đã đọc gần như tất cả tài liệu hướng dẫn mùa xuân. Theo như tôi hiểu rằng mùa xuân là quái vật cấu hình. Chú thích dựa trên hoặc dựa trên Xml, nó không quan trọng nhưng những gì tôi thực sự không hiểu là sự khác biệt giữa người quản lý giao dịch và người quản lý thực thể là gì.Sự khác nhau giữa Người quản lý giao dịch và Người quản lý thực thể

Nếu chúng tôi đã tiêm thực thểManager trên lớp Dao, tại sao chúng ta cần người quản lý giao dịch trên lớp dịch vụ hoặc ngược lại. Nếu chúng ta tiêm trình quản lý giao dịch (kết thúc tốt đẹp entitymanager) thì tại sao chúng ta cần tiêm entitymanager trên DaoLayer. Đối với JPARepositories, tôi thậm chí không cần phải tiêm bất kỳ người quản lý nào. Mùa xuân làm mọi thứ cho tôi (tôi không thực sự hiểu cơ học). Câu hỏi khác của tôi là cho JPARepositories Spring sử dụng entityManager hoặc transactionManager?

Trả lời

6

TransactionManager hoàn toàn khác với EntityManager, một người chịu trách nhiệm về thực thể (người nghe, thực thể, mối quan hệ, vòng đời kiên trì của họ và giao diện này định nghĩa các phương thức được sử dụng để tương tác với ngữ cảnh bền vững). bối cảnh nơi các thực thể còn sống, trong khi đó TransactionManager chịu trách nhiệm truy cập dữ liệu giao dịch, hỗ trợ cho tất cả các giao dịch cần xảy ra trong ứng dụng của bạn.

Cấu hình ràng buộc một đối tượng thực thể đối với một người quản lý giao dịch cụ thể.

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <qualifier value="pagTransactionManager" /> 
</bean> 

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> 
    <property name="persistenceUnitName" value="persistenceUnit" /> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
</bean> 

Mà nó có nghĩa là kết nối đến cơ sở dữ liệu và các đối tượng được quản lý bởi EntityManager, nhưng đối tượng mà mở một giao dịch gần trong lớp dịch vụ sử dụng chú thích @Transaction là TransactionManager.

Giao diện javax.transaction.TransactionManager cho phép máy chủ ứng dụng kiểm soát ranh giới giao dịch thay mặt cho ứng dụng đang được quản lý, giao diện này chứa rất nhiều phương pháp đang sử dụng để kiểm soát chúng như: cam kết, tạm dừng, khôi phục. Vì vậy, về cơ bản tiêm một trong những đối tượng này phụ thuộc vào những gì bạn đang tìm kiếm, quản lý các thực thể và hoạt động với chúng sử dụng entitymanager, kiểm soát trạng thái giao dịch của ứng dụng của bạn bằng chính bạn sử dụng transactionmanager.

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