2013-02-22 6 views
21

Một số người, kể cả tôi, đang vật lộn với việc sáp nhập các thực thể từ các mô-đun khác nhau (đặc biệt là với JavaSE, ví dụ: JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automatically). Dựa trên các câu trả lời không có cách trực tiếp dễ dàng để làm điều đó. Một trong những giải pháp là liệt kê tất cả các lớp từ tất cả các lọ trong tệp đơn vị lưu giữ duy nhất, nhưng điều đó không thực sự thanh lịch. Tôi có thể đã vô tình tìm thấy một cách khác. Nói chung, tất cả các lớp thực thể của tôi được ánh xạ bằng cách sử dụng các chú thích . Đối với các giải pháp: persistence.xml có thể bao gồm nhiều file mapping XML, ví dụ:Nhiều lọ, giải pháp đơn vị bền vững duy nhất?

main.jar META-INF/persistence.xml:

<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL"> 
    <mapping-file>META-INF/order-mappings.xml</mapping-file> 
    <mapping-file>META-INF/customer-mappings.xml</mapping-file> 
</persistence-unit> 

Các tập tin bản đồ có thể được đặt trong lọ khác nhau. Những gì tôi nhận thấy là chúng có thể chứa các yếu tố <entity>mà không cần bất kỳ thuộc tính, ví dụ:

order.jar META-INF/lệnh mappings.xml

<entity-mappings>  
    <entity class="com.company.Order"></entity>  
</entity-mappings> 

Thậm chí nếu các tập tin bản đồ doesn 't bản đồ bất kỳ thuộc tính các chú thích trong lớp Java được đưa vào tài khoản anyway và tất cả mọi thứ dường như làm việc tốt! Điều đó có nghĩa là có thể dễ dàng bao gồm các thực thể từ nhiều lọ vào một đơn vị duy trì liên tục chỉ bằng cách bao gồm các tệp ánh xạ XML từ các JAR cụ thể.

Câu hỏi của tôi là: đây có phải là cách sử dụng tệp ánh xạ JPA được phép hay chỉ là tác dụng phụ của nhà cung cấp kiên trì của tôi (Hibernate)?

+0

xin lỗi tôi đã xóa nhận xét – cproinger

+0

Vấn đề là thế hệ metamodel dường như không hoạt động theo cách này. Siêu mô hình cho các lớp như vậy trống. – kboom

+0

Cảm ơn câu hỏi/gợi ý của bạn. Bạn đã cứu ngày của tôi! ;) – Mirko

Trả lời

6

Có, điều này được cho phép bởi đặc tả JPA.

Ánh xạ thực thể XML được thiết kế để ghi đè chú thích JPA. Trừ khi bạn thay đổi cụ thể hành vi mặc định bằng cách sử dụng thẻ <xml-mapping-metadata-complete/>, nhà cung cấp JPA sẽ sử dụng các chú thích không có ánh xạ XML.

Dưới đây là một đoạn trích từ JPA 2.0 spec:

12,1 Sử dụng Descriptor XML

... Sự vắng mặt hoặc hiện tại của subelement xml-mapping-siêu dữ liệu hoàn chỉnh chứa trong phần tử con mặc định duy trì độ dài của phần tử ánh xạ thực thể kiểm soát xem mô tả ánh xạ đối tượng XML/mô tả ánh xạ quan hệ được sử dụng để ghi đè có chọn lọc các giá trị chú thích hay liệu nó phục vụ là một thay thế hoàn toàn cho chú thích siêu dữ liệu ngôn ngữ Java.

Nếu các subelement xml-mapping-siêu dữ liệu hoàn chỉnh được chỉ định, bộ hoàn chỉnh lập bản đồ siêu dữ liệu cho các đơn vị bền vững được chứa trong các tập tin bản đồ XML cho các đơn vị kiên trì, và bất cứ kiên trì chú thích trên các lớp được bỏ qua.