2016-09-24 7 views
0

Я пытаюсь отобразить хешсет из объекта PO для отображения в объекте модели с использованием отображения бульдозера.Dozer Mapping от HashSet до Arraylist

Это мой источник и класс назначения: -

public class Source implements Serializable { 
    Set<NoteVariableDefinitionPOImpl> noteVariableDefinitionPO = new HashSet<NoteVariableDefinitionPOImpl>(); 
} 

public class Destination implements Serializable { 
List<NoteVariableDefinition> noteVariableDefinition = new ArrayList<NoteVariableDefinition)(); 

NoteVariableDefinitionPOImpl класс:

class NoteVariableDefinitionPOImpl { 
    int x; // setter + getter 
} 

NoteVariableDefinition класс:

class NoteVariableDefinition { 
    int y ; 
    // setter + getter 
} 

Моя конфигурация отображение бульдозер:

<mapping wildcard="false" map-id="NC.Source.Destination" map-null="false"> 
    <class-a>test.Source</class-a> 
    <class-b>test.Destination</class-b> 

    <field map-id="NC.NoteVariableDefinitionPOImpl.NoteVariableDefinition"> 
     <a>noteVariableDefinitionPO</a> 
     <b>noteVariableDefinition</b> 
     <a-hint>java.util.HashSet</a-hint> 
     <b-hint>java.util.ArrayList</b-hint> 
    </field> 
</mapping> 


<mapping wildcard="false" 
    map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition" type="one-way" map-null="false"> 
    <class-a>com.test.po.impl.NoteVariableDefinitionPOImpl</class-a> 
    <class-b>com.test.model.NoteVariableDefinition</class-b> 
    <field> 
     <a>x</a> 
     <b>y</b> 
    </field> 
</mapping> 

Всякий раз, когда я запускаю это отображение, я всегда получаю следующее сообщение об ошибке:

MapId: NC.NoteVariableDefinitionPO.NoteVariableDefinition 
    Type: null 
    Source parent class: test.Source 
    Source field name: noteVariableDefinitionPO 
    Source field type: class java.util.HashSet 
    Source field value: [[email protected]] 
    Dest parent class: test.Destination 
    Dest field name: noteVariableDefinition 
    Dest field type: java.util.List 
    org.dozer.MappingException: Class mapping not found by map-id: SRC-CLASS- com.test.po.impl.NoteVariableDefinitionPOImpl DST-CLASS-java.util.ArrayList MAP-ID->NC.NoteVariableDefinitionPO.NoteVariableDefinition 

Как сопоставить с HashSet, чтобы ArrayList в этом случае?

Я новичок в сортировке дозатора и, следовательно, не в состоянии определить собственный конвертер.

бульдозер документация говорит, что он может преобразовать набор в список

бульдозер автоматически сопоставляет между типами коллекций и автоматически выполняет любое преобразование типа.

Следующая отображение коллекции автоматически обрабатывается Dozer: (Это >> все двунаправленная):

Набор в список

ответ

3

Попробуйте это: -

Сначала определите настраиваемый преобразователь:

package com.test.converter; 

public class Converter extends DozerConverter<Set, List> { 

    @Autowired 
    Mapper mapper; 

    public Converter() { 
    super(Set.class, List.class); 
    } 

    @Override 
    public List convertTo(Set noteVariableDefinitionPO, List noteVariableDefinition) { 
     //iterate set 
     NoteVariableDefinition mappedValue = mapper 
       .map(noteVarDefinitionPO, 
         NoteVariableDefinition.class, 
         mappingID); 
     // add it to list and return 
    } 

    @Override 
    public Set convertFrom(List arg0, Set arg1) { 
    return null; 
    } 

} 

Затем определим следующую глобальную конфигурацию:

<mappings> 
    <configuration> 
     <custom-converters> 
      <converter type= "com.test.converter.Converter" (path to custom converter)> 
       <class-a>java.util.Set </class-a> 
       <class-b>java.util.List </class-b> 
      </converter> 
     </custom-converters> 
    </configuration> 
</mappings> 

и изменить значение поля как:

<field map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition" 
     custom-converter= "com.test.converter.Converter" (path to custom converter)> 
     <a>noteVariableDefinitionPO</a> 
     <b>noteVariableDefinition</b> 
     <a-hint>java.util.HashSet</a-hint> 
     <b-hint>java.util.ArrayList</b-hint> 
    </field> 
+0

Спасибо много. Оно работает. :) – user2332505