6

非常に単純であるべきだと思う何かのために、ドーザーを私の意志に曲げさせるのに苦労しています。マッピングしたい 2 つの類似したモデルがありますが、一方は他方よりも「深い」階層を持っているため、コレクションを扱うときに問題が発生しています。次のクラスを検討してください。

ソースクラス:

class Foo {
    String id;
    NameGroup nameGroup; 
    // Setters/Getters
}

class NameGroup {
    private List<Name> names;
    // Setters/Getters
}

class Name {
    private String nameValue;
    // Setters/Getters
}

宛先クラス:

class Bar {
    private String barId;
    private BarNames barNames;
    // Setters/Getters
}

class BarNames {
    private List<String> names;
    // Setters/Getters
}

ここで、次の一方向マッピングが必要です。

Foo.id -> Bar.barId // Simple enough

しかし、私は次に必要です:

Foo.nameGroup.names.nameValue -> Bar.barNames.names

そのため、各Nameインスタンスはリストに追加されます。これは可能ですか?Foo.nameGroup.namesStringBarNames.names

4

1 に答える 1

6

これは、「Name」クラスに String コンストラクターが含まれている限り、Dozer で簡単に実行できます。

Dozer ドキュメントからの引用 ( http://dozer.sourceforge.net/documentation/simpleproperty.html ):

データ型の変換は、Dozer マッピング エンジンによって自動的に実行されます。現在、Dozer は次のタイプの変換をサポートしています: (これらはすべて双方向です)

...

複合型に文字列コンストラクターが含まれている場合、文字列から複合型へ

...

上記のようにクラスでこれをテストしました(同じ問題に悩まされていました)が、完全に機能します。使用したマッピングは次のとおりです。

<mapping>
  <class-a>com.test.bar.Bar</class-a>
  <class-b>com.test.foo.Foo</class-b>
  <field>
    <a>barId</a>
    <b>id</b>
  </field>
  <field>
    <a>barNames.names</a>
    <b>nameGroup.names</b>
    <a-deep-index-hint>java.lang.String</a-deep-index-hint>
    <b-deep-index-hint>com.test.foo.Name</b-deep-index-hint>
  </field>
</mapping>
于 2010-01-04T10:14:13.003 に答える