2009-12-16 12 views
5

Sto lottando per ottenere Dozer da piegare alla mia volontà per qualcosa che ritengo dovrebbe essere abbastanza semplice. Ho due modelli simili che desidero mappare, tuttavia uno ha una gerarchia "più profonda" rispetto all'altro e questo mi causa problemi quando si tratta di collezioni. Considerate le seguenti classi:Mappature Dozer non banali

classi Fonte:

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

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

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

classi Destinazione:

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

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

Ora vorrei seguenti mappature a senso unico:

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

ma io quindi necessario:

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

Quindi ogni istanza Name in Foo.nameGroup.names deve comportare l'aggiunta di un numero String all'elenco BarNames.names. È possibile?

risposta

5

Questo può essere fatto facilmente con Dozer finché la classe "Nome" contiene un costruttore di stringhe.

Una citazione dalla documentazione apripista (http://dozer.sourceforge.net/documentation/simpleproperty.html): tipo

dati coversion viene eseguita automaticamente dalla mappatura del motore Dozer. Attualmente, Dozer supporta i seguenti tipi di conversioni : (questi sono tutti bi-direzionale)

...

String per tipo complesso se il tipo complesso contiene un costruttore String

. ..

Ho provato questo con le vostre classi come sopra (sono stato 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> 
+0

P.S. anche questo funziona senza i suggerimenti – pjmyburg

+0

Grazie @pjmyburg - Darò questo risultato. – teabot

Problemi correlati