0

Dozerのディープマッピングプロパティを使用せずにコンポジションをマッピングしたいと思います。

もう1つの重要な要素は、構成されたクラスとメインクラスが同じクラスにマップされることです。

私はSO、Dozerのドキュメント(ちなみに良いです)を検索しましたが、それでも私が探しているものが見つかりません

例:AおよびB-> C

Class A {
  B b
  a1
}

Class B {
  b1
  b2
}

Class C {
  ca1
  cb1
  cb2

}

私は次のようにマップしたくありません:

<mapping>
  <class-a>A</class-a>
  <class-b>C</class-b>
  <field>
    <a>b.b1</a>
    <b>cb1</b>
  </field>
  etc.
</mapping>

次のようなものを使用したい:

<mapping>
  <class-a>B</class-a>
  <class-b>C</class-b>
  <field>
    <a>b1</a>
    <b>cb1</b>
  </field>
  etc.
</mapping>
<mapping>
  <class-a>A</class-a>
  <class-b>C</class-b>
  <field>
    <a>a1</a>
    <b>ca1</b>
  </field>
</mapping>

私のクラスBは、他のクラスの作曲で使用されます。

DRY(Do n't Repeat Yourself)を尊重したいと思います。

4

2 に答える 2

0

深いマッピングを指定する必要はありません。あなたが言ったように、B1 が B2 にどのようにマッピングされているかを言うことができるはずです:

<mapping>
  <class-a>B1</class-a>
  <class-b>B2</class-b>
  <field>
    <a>b1Param1</a>
    <b>b2Param1</b>
  </field>
</mapping>

また、別のマッピングとして、A1 が A2 にどのようにマッピングされるか (ただし、構成されたクラスのサブマッピングではありません):

<mapping>
  <class-a>A1</class-a>
  <class-b>A2</class-b>
  <field>
    <a>b1</a>
    <b>b2</b>
  </field>
</mapping>

Dozer は、b1 と b2 が特定のクラスのオブジェクトであることを認識し、2 つの間のマッピングを探します。これは別のマッピングとして提供できます。

于 2012-10-21T15:59:53.537 に答える
0

残念ながら、深いマッピングを使用してそれを繰り返す以外に解決策はありません。
問題は、Dozer が C -> A と B をマッピングすることです。これは簡単には不可能です。

1 つの解決策は、「一方向」マッピングの場合にこのタイプの自動マッピングを有効にすることです。

このDozer FAQと同様の複雑な問題

于 2012-10-29T09:03:15.437 に答える