2010-07-17 18 views
15

Tôi phải thiết kế một mô hình dữ liệu (trong một ứng dụng Java EE 6) sẽ được lưu thông qua JPA và cũng cần phải được tuần tự hóa thông qua JAXB. Lần cuối cùng tôi làm điều đó, tôi đã có một nhóm lớp thực thể với chú thích JAXB và một nhóm khác có chú thích JPA. Điều này có nghĩa là tôi phải có rất nhiều mã soạn sẵn để dịch giữa hai người. Tôi đang nghĩ đến việc kết hợp chúng, để mỗi lớp sẽ có cả hai loại chú thích. Tôi biết điều này có thể được thực hiện, nhưng câu hỏi của tôi là, nên không? Nó có gây ra vấn đề gì không?Kết hợp JAXB và JPA trong một mô hình

+0

Xem thêm http://stackoverflow.com/questions/1820428/do-domain-classes-usually-get-jpa-or-jaxb- chú thích-hoặc-cả hai/1820445 – skaffman

Trả lời

7

Câu hỏi này hơi quá rộng để tôi trả lời. Nhưng tôi có trải nghiệm liên quan cụ thể bằng cách sử dụng Jackson trong JAXB với các thực thể JPA mà bạn có thể thấy thú vị.

Trong trường hợp của tôi, tôi đã có một mô hình JPA với khoảng ba chục thực thể và nhiều tham chiếu tuần hoàn. Biểu đồ quan hệ giữa các thực thể cũng gần như được kết nối chặt chẽ. Nói cách khác, có thể điều hướng đến gần như bất kỳ thực thể nào trong tập hợp từ bất kỳ thực thể nào khác bằng cách theo dõi các mối quan hệ thực thể. Trong trường hợp của tôi, với các thực thể như được mô tả và Jackson 1.5, việc chồng các chú thích JAXB vào các thực thể JPA của tôi hóa ra lại là một ý tưởng tồi.

Đối với một điều, Jackson 1.5 đã truy cập vô hạn vào các tham chiếu tuần hoàn. Tôi cho rằng lỗi của nhà điều hành thay vì lỗi. Jackson là phần mềm tuyệt vời. Ngoài ra, tôi nghĩ bản phát hành sắp tới 1.6 cung cấp các tính năng mới để xử lý điều này cho mỗi JACKSON-235. Vì vậy, điều này có thể là tranh luận sớm!

Khó khăn khác của tôi liên quan đến tính gọn nhẹ được tuần tự hóa khi đối mặt với các thực thể được kết nối chặt chẽ. Tuần tự hóa tất cả các mối quan hệ thực thể của tôi là không thực tế. Tôi đã sắp xếp một số lượng thông tin không liên quan tục tĩu trong mọi yêu cầu bằng cách theo dõi tất cả các mối quan hệ thực thể theo chiều sâu đầy đủ của họ một cách ngây thơ.

Tôi muốn chỉ định nhiều lần tuần tự hóa các đối tượng JAXB của mình, chọn một đối tượng có các trường và mối quan hệ thích hợp tùy thuộc vào mục đích sử dụng. Nhưng, theo như tôi biết, JAXB và Jackson không có sự linh hoạt như vậy. Chúng cung cấp sự linh hoạt đáng kể trong việc xác định biểu diễn - những gì thoáng qua, danh sách trông như thế nào, v.v. - nhưng tôi không nghĩ nhiều biểu diễn có thể cho một đối tượng. Có lẽ có một cách thông minh để xác định nhiều biểu diễn dưới JAXB hoặc Jackson và chuyển đổi ở thời gian chạy ... Tôi muốn được quan tâm để tìm hiểu nếu một điều như vậy tồn tại. Có lẽ có một tính năng cho điều này mà tôi không biết gì về, hoặc một số thủ thuật có thể được chơi với phân lớp. Nhưng tôi không thể tìm thấy nó, vì vậy cuối cùng tôi đã từ bỏ và đi với DTO.

Một lần nữa, điều này hoàn toàn cụ thể đối với mô hình. Có lẽ đây không phải là vấn đề cho bạn (hoặc có thể bạn có giải pháp thông minh cho những vấn đề này!)

+0

Vâng, tôi có cảm giác rằng các tham chiếu chu kỳ và các đối tượng lồng nhau sẽ là một vấn đề. Nhưng vì tôi đang thiết kế mô hình từ đầu, tôi có cơ hội tránh né nó tốt hơn. –

+0

re: multiple serializations. Tôi không chắc chắn nó sẽ là một ý tưởng tốt cho JAXB để có một tính năng như vậy. Tôi có thể dễ dàng thấy một thứ như thế dẫn đến một đống chú thích hoàn toàn không thể hiểu được. Việc có nhiều DTO có thể tiết lộ chi tiết hơn, nhưng ít nhất bạn luôn có thể hiểu những gì đang diễn ra. –

1

DataNucleus cho phép sử dụng JPA đến RDBMS (sử dụng JDBC sau hậu trường) và XML (sử dụng JAXB phía sau hậu trường). Nó có thể giải thích các chú thích JPA của bạn như xác định cách thực hiện tuần tự hóa JAXB - bạn cũng có thể thêm chú thích JAXB nếu bạn muốn một số chú thích JAXB quá nếu bạn muốn

9

Điều này chắc chắn có thể được thực hiện. Tôi thực sự tìm thấy viễn cảnh duy trì mã để sao chép giữa các mô hình có vấn đề hơn.

EclipseLink là một lựa chọn tuyệt vời cho ứng dụng này vì nó chứa cả JPA (EclipseLink là RI và mở có nguồn gốc từ TopLink) và triển khai JAXB.

EclipeLink JAXB (MOXy) cũng chứa một số phần mở rộng cho các đối tượng bản đồ JPA to XML:

Để biết thêm thông tin xem:

+0

Tôi thực sự đã sử dụng EclipseLink cho sự kiên trì khi dự án này bắt đầu, nhưng tôi thấy nó là một thảm họa hoàn chỉnh và chuyển sang Hibernate. Nhưng tôi vẫn có một số thông tin hữu ích từ bài đăng của bạn, vì vậy cảm ơn bạn. –

+0

Xin lỗi vì bạn đã có trải nghiệm tiêu cực với EclipseLink. Các diễn đàn EclipseLink là một nơi tuyệt vời để nhận trợ giúp http://tiny.cc/waxx8. Xin lưu ý rằng MOXy có thể được sử dụng để ánh xạ các thực thể JPA từ bất kỳ nhà cung cấp kiên trì nào. –

+1

Bạn có thể sử dụng MOXy để liên kết XML/JSON chứ không phải cho sự kiên trì. Tôi làm. – HDave

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