簡體   English   中英

推土機從HashSet映射到Arraylist

[英]Dozer Mapping from HashSet to Arraylist

我正在嘗試使用推土機映射將PO對象的哈希集映射到模型對象中的列表。

這是我的源和目標類:

 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:   [com.test.po.impl.NoteVariableDefinitionPOImpl@e21649a8]
  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?

我是推土機貼圖的新手,因此也無法定義自定義轉換器。

推土機文檔說可以將Set轉換為List

推土機自動在集合類型之間映射,並自動執行任何類型轉換。

Dozer會自動處理以下集合映射:(這些都是>>雙向的):

設為清單

嘗試這個 :-

首先定義一個自定義轉換器:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM