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
Trả lời
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!)
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. –
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. –
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
Đ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:
- XPath base mappings
- Mapping bi-directional relationships (using @XmlInvereseReference)
- Xử lý mối quan hệ quan trọng hỗn
- Xử lý các lớp học chính nhúng
- Xử lý java.sql . * các loại
Để biết thêm thông tin xem:
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. –
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. –
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
- 1. F # mô hình kết hợp kỳ quặc
- 2. Scala vịt gõ mô hình kết hợp
- 3. Scala - chỉ định một mục phù hợp trong mô hình kết hợp
- 4. Mô hình liên kết và xem mô hình Silverlight MVVM
- 5. Kết hợp các hành động JPA và JDBC trong một giao dịch
- 6. Sử dụng một biến trong mô hình kết hợp trong Ocaml hoặc F #
- 7. differenct giữa/và/* trong mô hình phù hợp url servlet
- 8. Erlang mô hình kết hợp với các chức năng
- 9. Tự động kết hợp + NSubstitute: Đóng băng mô hình?
- 10. Các phím tổng hợp trong JPA
- 11. Cách tạo và xử lý khóa chính kết hợp trong JPA
- 12. self.class.name trong mô-đun kết hợp
- 13. làm cách nào để liên kết một mô hình hai lần với một mô hình khác
- 14. Các lớp miền thường có chú thích JPA hoặc JAXB hay cả hai?
- 15. Mô hình đường ray thuộc về một mô hình hoặc một mô hình khác hoặc
- 16. Làm thế nào để bạn kết hợp hoạt hình dịch thuật và quy mô
- 17. Ngắt kết nối tín hiệu cho mô hình và kết nối lại trong django
- 18. JPA hợp nhất trong một ứng dụng web RESTful với DTO và Khóa lạc quan?
- 19. UnsupportedOperationException khi kết hợp một đối tượng mô hình Hibernate hiện có?
- 20. Tạo chỉ số tổng hợp từ một mô hình Django
- 21. Hợp nhất các đối tượng Hibernate và đối tượng JAXB
- 22. Kết hợp hai hình ảnh vào một hình ảnh mới
- 23. Kết hợp hình ảnh và văn bản trong một nút trong kivy
- 24. Kết hợp hình ảnh trong android
- 25. Xác nhận hợp lệ chống lại một Schema với JAXB
- 26. Làm cách nào để duy trì sự nhất quán giữa mô hình và mô hình xem trong mô hình MVVM?
- 27. Các mối quan hệ chéo mô hình trong NSManagedObjectModel từ các mô hình đã hợp nhất?
- 28. cách tạo mô hình trong trường hợp thử nghiệm mô hình
- 29. JAXB: đa hình với Generics
- 30. cách phân trang các bản ghi từ nhiều mô hình? (Tôi có cần một sự kết hợp đa hình không?)
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