2010-03-10 43 views
36

Tôi có một số câu hỏi về tích hợp JPA + Spring chạy trên Tomcat. Tôi đã tìm kiếm một thời gian và không thể tìm thấy câu trả lời cụ thể nào, vì vậy tại đây:Làm thế nào để tiêm JPA EntityManager bằng cách sử dụng mùa xuân

Có thể đưa Spring JPA entityManager vào lớp DAO của tôi mà không mở rộng JpaDaoSupport không? Nếu có, Spring có quản lý giao dịch trong trường hợp này không?

Tôi đang cố gắng để giữ cho cấu hình Spring của tôi cũng đơn giản càng tốt:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="em"/> 
</bean> 
<bean id="em" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myPU"/> 
</bean> 

EDIT: đó là rất hữu ích, cảm ơn tất cả các bạn!

Trả lời

29

Có, mặc dù nó đầy gotchas, vì JPA hơi khác thường. Đó là rất nhiều giá trị đọc tài liệu về tiêm JPA EntityManagerEntityManagerFactory, mà không phụ thuộc mùa xuân rõ ràng trong mã của bạn:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa

này cho phép bạn hoặc tiêm EntityManagerFactory, nếu không tiêm một thread-safe, proxy giao dịch của một số EntityManager trực tiếp. Cái thứ hai làm cho mã đơn giản hơn, nhưng có nghĩa là cần thêm ống nước Spring.

12

Có thể có lò xo để tiêm đối tượng JPAManager đối tượng vào lớp DAO của tôi mở rộng JpaDaoSupport không? nếu có, mùa xuân có quản lý giao dịch trong trường hợp này không?

Đây là tài liệu màu đen trên nền trắng trong 12.6.3. Implementing DAOs based on plain JPA:

Có thể viết mã chống lại JPA đồng bằng mà không sử dụng bất kỳ mùa xuân phụ thuộc, sử dụng một tiêm EntityManagerFactory hoặc EntityManager. Lưu ý rằng mùa xuân có thể hiểu @PersistenceUnit@PersistenceContext chú thích cả tại hiện trường và mức độ phương pháp nếu một PersistenceAnnotationBeanPostProcessor được kích hoạt. Một tương ứng DAO thực hiện có thể trông như thế này (...)

Và liên quan đến quản lý giao dịch, có một cái nhìn tại 12.7. Transaction Management:

Xuân JPA cho phép một cấu hình JpaTransactionManager để lộ một giao dịch JPA để JDBC mã truy cập truy cập cùng một nguồn dữ liệu JDBC, với điều kiện đăng ký JpaDialect hỗ trợ truy xuất kết nối JDBC cơ bản. Trong số đó, Spring cung cấp các phương ngữ cho việc triển khai Toplink, Hibernate và OpenJPA JPA. Xem phần tiếp theo để biết chi tiết về cơ chế JpaDialect.

3

Phiên bản Spring + JPA mới nhất giải quyết vấn đề này một cách cơ bản. Bạn có thể tìm hiểu thêm về cách sử dụng mùa xuân và JPA togather tại a separate thread

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