Pregunta

Estoy luchando por conseguir Dozer doblar a mi voluntad por algo que siento debería ser bastante simple. Tengo dos modelos similares en los que deseo mapear, sin embargo, uno tiene una jerarquía 'más profunda' que la otra y esto me está causando problemas al tratar con colecciones. Considere las siguientes clases:

Clases de origen:

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

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

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

Clases de 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 unidireccionales:

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

Pero luego necesito:

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

Entonces cada uno Name instancia Foo.nameGroup.names debería dar lugar a un String siendo agregado al BarNames.names lista. es posible?

¿Fue útil?

Solución

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

Una cita de los documentos de tocas (http://dozer.sourceforge.net/documentation/simpleproperty.html):

La cubierta del tipo de datos se realiza automáticamente por el motor de mapeo de tocas. Actualmente, Dozer admite los siguientes tipos de conversiones: (todos estos son bidireccionales)

...

Cadena al tipo complejo si el tipo complejo contiene un constructor de cadenas

...

He probado esto con sus clases como anteriormente (estaba atascado con el mismo problema) y funciona perfectamente. Aquí está el mapeo que usé:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top