JAXBとJPAを1つのモデルに組み合わせる
-
16-09-2020 - |
質問
JPA経由で永続化されるデータモデル(Java EE 6アプリケーション内)を設計する必要があり、JAXB経由でシリアル化する必要があります。私がそれをした最後の時は、JAXBアノテーションを持つエンティティクラスのグループとJPAアノテーションを持っていました。これは、2つの間の翻訳のためのボイラープレートコードをたくさん持っていなければならなかったことを意味しました。各クラスに両方の種類の注釈があるように、それらを組み合わせることを考えています。私はこの をやることを知っていますが、私の質問は それがあるべきですか?問題を引き起こしますか?
解決
質問は私が答えるために少し広すぎることです。しかし、 jackson-235 。だからこれは間もなくmootかもしれません!
私の他の困難さは、強固に接続されたエンティティの顔に直列化されたコンパクトさに関連しています。私のエンティティ関係をすべてシリアル化していませんでした。私は、すべてのエンティティ関係に沿って、すべてのエンティティの関係を彼らの完全な深さに追従させることによって、あらゆる要求においてわいせつな量の無関係な情報をシリアル化しました。
私のJAXBオブジェクトの複数のシリアライズを指定し、適切なフィールドと使用されている使用に応じて関係を指定して選択したいと思いました。しかし、私が知っている限りでは、JAXBとジャクソンはそのような柔軟性を提供しません。 表現 - 一時的なもの、リストの外観などのものです。ただし、1つのオブジェクトに複数の表現が可能ではないと思います。 JAXBやジャクソンの下に複数の表現を定義し、実行時にスイッチを定義するための賢い方法があるかもしれません...私はそのようなことが存在するかどうかを学ぶことに興味があります。おそらく、私が無知にしている、またはサブクラスで遊ぶことができるいくつかのトリケのための機能があります。しかし、私はそれを見つけることができなかったので、最終的に私はあきらめてDTOと一緒に行きました。
また、これはすべてモデルにかなり固有のものです。たぶんこれらはあなたのための問題ではありません(またはあなたはこれらの問題のための賢い解決策を持っているかもしれません!)
他のヒント
これは間違いなく行われます。私は実際にはモデルの間のコピーのコピーにコードを維持する展望を見つけます。
EclipseLink は、JPA(EclipseLinkはRIです)の両方が含まれているため、このアプリケーションに最適です。そしてTopLinkから入手しています)、JAXB実装。
ECLIPELINK JAXB(MOXY)には、JPAエンティティをマッピングするためのいくつかの拡張機能が含まれています。 XML:
- XPath Base Mappings
- 双方向関係のマッピング(@xmlInverSereferenceを使用)
- 複合キーの関係の取り扱い
- 組み込みキークラスの取り扱い
- java.sql。*型 の処理
詳細については:
DataN核を使用すると、JPAを使用して(シーンの背後にあるJDBCを使用)、XML(シーンの背後にあるJAXBを使用して)を使用して永続性を可能にします。JAXBシリアライゼーションがどのように実行されるかを定義するとしてJPAアノテーションを妨げることができます - あなたがとても望んでいるならば、JAXBアノテーションも追加することができます