2009-12-16 29 views
5

Estoy luchando para obtener Dozer a doblar a mi voluntad por algo que creo que debería ser bastante simple. Tengo dos modelos similares de los que me gustaría mapear, pero uno tiene una jerarquía 'más profunda' que la otra y esto me está causando problemas cuando trato con colecciones. Tenga en cuenta las siguientes clases:asignaciones Dozer no triviales

clases Fuente:

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

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

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

clases Destino:

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

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

Ahora me gustaría las siguientes asignaciones de un solo sentido:

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

Pero I entonces necesita:

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

Por lo tanto, cada instancia Name en Foo.nameGroup.names debe dar como resultado que se agregue String a la lista BarNames.names. es posible?

Respuesta

5

Esto se puede hacer fácilmente con Dozer siempre que su clase "Nombre" contenga un constructor de cadenas.

una cita de la docs bulldozer (http://dozer.sourceforge.net/documentation/simpleproperty.html): Tipo

datos coversion se realiza automáticamente por el mapeo motor bulldozer. Actualmente, dormilón es compatible con los siguientes tipos de conversiones: (estos son todos bidireccional)

...

cadena a Tipo Complejo si el Tipo Complejo contiene un constructor de String

. ..

He probado esto con sus clases como las anteriores (me quedé con el mismo problema) y funciona perfectamente. Aquí está el mapeo que utilicé:

<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. esto también funciona sin las pistas – pjmyburg

+0

Gracias @pjmyburg - Voy a intentarlo. – teabot

Cuestiones relacionadas