Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 推土机映射:多个源到目标_Java_Dozer - Fatal编程技术网

Java 推土机映射:多个源到目标

Java 推土机映射:多个源到目标,java,dozer,Java,Dozer,我是推土机测绘新手 我们可以将多个源类的属性映射到目标类吗 乙二醇 是否可以使用一个映射配置文件执行此操作?不是直接执行的否。您需要创建一个新类来包装两个源类,然后从中复制: class D { private A a; private B b; } <mapping> <class-a>D</class-a> <class-b>C</class-b> <field> <a>

我是推土机测绘新手

我们可以将多个源类的属性映射到目标类吗

乙二醇


是否可以使用一个映射配置文件执行此操作?

不是直接执行的否。您需要创建一个新类来包装两个源类,然后从中复制:

class D {
    private A a;
    private B b;
}

<mapping>
  <class-a>D</class-a>
  <class-b>C</class-b>
  <field>
    <a>a.a</a>
    <b>a</b>
  </field>
  <field>
    <a>a.b</a>
    <b>b</b>
  </field>
  <field>
    <a>b.c</a>
    <b>c</b>
  </field>
</mapping>
D类{
私人A;
私人B,;
}
D
C
a、 a
A.
a、 b
B
b、 c
C
或者您需要复制两次,从每个源类复制一次到目标对象,确保不清空现有字段

<mapping wildcard="false">
    <class-a>A</class-a>
    <class-b>C/class-b>
    <field>
       <a>a</a>
       <b>a</b>
    </field>   
    <field>
       <a>b</a>
       <b>b</b>
    </field>   
</mapping>

<mapping wildcard="false">
    <class-a>B</class-a>
    <class-b>C/class-b>
    <field>
       <a>c</a>
       <b>c</b>
    </field> 
</mapping>

A.
C/b类>
A.
A.
B
B
B
C/b类>
C
C

您可以只映射两次。首先,使用Destination.class作为目标,然后使用第一次映射产生的对象作为目标:

    One one = new One();
    one.setA(1);
    one.setB(2);

    Two two = new Two();
    two.setC("3");

    Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

    Destination destination = mapper.map(one, Destination.class);

    mapper.map(two, destination);

    System.out.println(destination);
    // Destination [a=1, b=2, c=3]

这甚至适用于空映射配置文件。

wildcard=“false”,每次都会创建一个新对象。wildcard=“true”复制到同一对象中。通配符选项与字段匹配相关。如果wildcard=false,则需要提及应映射的每个字段。通配符=true将按名称自动匹配。它不影响对象创建。FWIW也支持此功能
    One one = new One();
    one.setA(1);
    one.setB(2);

    Two two = new Two();
    two.setC("3");

    Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

    Destination destination = mapper.map(one, Destination.class);

    mapper.map(two, destination);

    System.out.println(destination);
    // Destination [a=1, b=2, c=3]