Domanda

Sto lottando per ottenere Dozer Piegare alla mia volontà per qualcosa che ritengo dovrebbe essere abbastanza semplice. Ho due modelli simili da cui desidero mappare, tuttavia uno ha una gerarchia "più profonda" dell'altra e questo mi sta causando problemi quando ho a che fare con le collezioni. Considera le seguenti classi:

Classi di origine:

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

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

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

Classi di destinazione:

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

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

Ora vorrei le seguenti mappature a senso unico:

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

Ma quindi ho bisogno:

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

Quindi ciascuno Name istanza in Foo.nameGroup.names dovrebbe provocare a String essere aggiunto al BarNames.names elenco. È possibile?

È stato utile?

Soluzione

Questo può essere facilmente fatto con Dozer fintanto che la tua classe "Nome" contiene un costruttore di stringhe.

Una citazione dei dottori di Dozer (http://dozer.sourceforge.net/documentation/simpleproperty.html):

La copertura del tipo di dati viene eseguita automaticamente dal motore di mappatura Dozer. Attualmente, Dozer supporta i seguenti tipi di conversioni: (Questi sono tutti bidirezionali)

...

String su tipo complesso se il tipo complesso contiene un costruttore di stringhe

...

L'ho testato con le tue lezioni come sopra (ero bloccato con lo stesso problema) e funziona perfettamente. Ecco la mappatura che ho usato:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top