Pergunta

Estou lutando para conseguir Escavilha curvar -se à minha vontade por algo que eu acho que deveria ser bastante simples. Eu tenho dois modelos semelhantes que desejo mapear, no entanto, um tem uma hierarquia 'mais profunda' do que a outra e isso está me causando problemas ao lidar com coleções. Considere as seguintes aulas:

Classes de origem:

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

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

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

Classes de destino:

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

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

Agora eu gostaria dos seguintes mapeamentos unidirecionais:

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

Mas eu então preciso:

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

Então, cada um Name instância em Foo.nameGroup.names deve resultar em um String sendo adicionado ao BarNames.names Lista. Isso é possível?

Foi útil?

Solução

Isso pode ser feito facilmente com o Dozer, desde que sua classe "nome" contenha um construtor de string.

Uma citação dos documentos do Dozer (http://dozer.sourceforge.net/documentation/simpleproperty.html):

A cobertura do tipo de dados é realizada automaticamente pelo mecanismo de mapeamento do Dozer. Atualmente, o Dozer suporta os seguintes tipos de conversões: (Estes são todos bidirecionais)

...

String to complex Type se o tipo complexo contiver um construtor de string

...

Eu testei isso com suas aulas como acima (fiquei com o mesmo problema) e funciona perfeitamente. Aqui está o mapeamento que usei:

<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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top