2011-01-19 25 views

Trả lời

41

Cập nhật: Mùa xuân 3.1 sẽ hỗ trợ persistence.xml-cấu hình JPA miễn phí, xem Spring 3.1 M2: Configuration Enhancements.


Câu trả lời của darioo là tốt để sử dụng thực tế, nhưng không chính xác về mặt kỹ thuật.

PersistenceProvider có hai phương pháp nhà máy:

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map) - cho các môi trường độc lập, persistence.xml là để được phân tích bởi nhà cung cấp bền bỉ.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) - cho môi trường máy chủ ứng dụng, persistence.xml được phân tích cú pháp bởi máy chủ ứng dụng và nội dung của nó được chuyển thành PersistenceUnitInfo.

Spring's LocalContainerEntityManagerFactoryBean mô phỏng môi trường máy chủ ứng dụng. Do đó, nó tự phân tách cú pháp persistence.xml, kết hợp nội dung của nó với các giá trị từ ngữ cảnh ứng dụng và chuyển nó tới nhà cung cấp kiên trì sử dụng phương thức factory thứ hai.

Tuy nhiên, quá trình lấy persistence.xml dữ liệu là cấu hình:

  • Bạn có thể cấu hình tên của tập tin persistence.xml sử dụng persistenceXmlLocation sở hữu - đó là hữu ích để tránh xung đột với các chiến lược JPA khởi tạo mặc định của máy chủ ứng dụng.

  • Bạn hoàn toàn có thể ghi đè nguồn của PersistenceUnitInfo bằng cách đặt chiến lược tùy chỉnh PersistenceUnitManager.

Vì vậy, trên thực tế bạn có thể cấu hình JPA trong mùa xuân mà không persistence.xml bằng cách viết một tùy chỉnh PersistenceUnitManager, mặc dù một người quản lý như vậy là không có sẵn ra khỏi hộp.

+1

Một câu trả lời rất hay, tôi sẽ bầu bạn nếu tôi không sử dụng hết số phiếu cho ngày này. Tôi cho rằng OP sẽ không bận tâm đào sâu vào bên trong Spring, vì nó có vẻ không cần thiết và hơi phức tạp. – darioo

+0

Cảm ơn câu trả lời +1 cho tất cả các giải thích – user373201

7

persistence.xml là cần thiết khi bạn đang sử dụng Hibernate thông qua JPA, ngay cả khi bạn đang sử dụng Spring JPA. Nếu bạn đang sử dụng Hibernate trực tiếp, thì persistence.xml là không cần thiết.

+1

Tại sao Spring JPA với Hibernate là nhà cung cấp JPA cần tệp persistence.xml? – Suvasis

1

Đặc điểm kỹ thuật JPA không quy định bất kỳ nơi nào mà tệp được yêu cầu, nhưng trong định nghĩa của các hợp đồng EntityManagerFactory và EntityManager và thực tế trong toàn bộ đặc tả, tệp persistence.xml được đề cập nhiều lần.

Gần đây tôi đã phải đối phó với câu hỏi liệu có thể lập trình cấu hình JPA 2.0 với Hibernate 3.6 mà không sử dụng persistence.xml chút nào hay không.

Tôi kết luận rằng điều này là không thể, mặc dù bạn có thể định cấu hình tệp để chứa cấu hình tối thiểu. Tôi xác định rằng tệp phải ít nhất chứa tên của đơn vị kiên trì của bạn. Phần còn lại của thông tin có thể được cung cấp theo chương trình cho nhà máy quản lý thực thể dưới dạng tham số.

Tôi chưa bao giờ sử dụng mùa xuân mặc dù, do đó tôi không biết nếu nó sử dụng bất kỳ thủ thuật để khắc phục vấn đề này.

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