Question

J'ai du mal à obtenir Barrette se plier à ma volonté pour quelque chose qui, selon moi, devrait être assez simple. J'ai deux modèles similaires que je souhaite cartographier entre, mais l'un a une hiérarchie «plus profonde» que l'autre et cela me cause des problèmes lorsqu'il s'agit de collections. Considérez les classes suivantes:

Classes source:

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

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

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

Cours de destination:

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

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

Maintenant, je voudrais les mappages à sens unique suivants:

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

Mais j'ai alors besoin:

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

Alors chacun Name instance dans Foo.nameGroup.names devrait entraîner un String être ajouté au BarNames.names liste. Est-ce possible?

Était-ce utile?

La solution

Cela peut facilement être fait avec Dozer tant que votre classe "Name" contient un constructeur de chaînes.

Une citation des documents Dozer (http://dozer.sourceforge.net/documentation/simpleproperty.html):

La housse de type de données est effectuée automatiquement par le moteur de cartographie du banc de bail. Actuellement, Dozer prend en charge les types de conversions suivants: (Ce sont tous bidirectionnels)

...

Chaîne à type complexe si le type complexe contient un constructeur de chaîne

...

J'ai testé cela avec vos cours comme ci-dessus (j'étais coincé avec le même problème) et cela fonctionne parfaitement. Voici la cartographie que j'ai utilisée:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top