【问题标题】:Dozer Mapping Confusion推土机映射混乱
【发布时间】:2014-05-22 13:56:37
【问题描述】:

我对推土机如何将源对象映射到目标对象感到困惑。我有以下情况:

源对象:

public class Rule {
private String id;
private String name;
private String group;
private String content;
private RuleType ruleType;
private String drlContent;
private boolean enabled;
private Strategy strategy;
// getters and setters
}

目标对象:

public class RuleActivity {
private String id;
private String name;
private Strategy strategy;
// getters and setters
}

XML 映射:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <stop-on-errors>true</stop-on-errors>
    <date-format>MM/dd/yyyy HH:mm</date-format>
</configuration>

<mapping wildcard="false">
    <class-a>com.magick.models.shared.Rule</class-a>
    <class-b>com.magick.models.shared.log.RuleActivity</class-b>
    <field>
        <a>id</a>
        <b>ruleId</b>
    </field>
    <field>
        <a>strategy.name</a>
        <b>strategy.name</b>
    </field>
     <field>
        <a>name</a>
        <b>name</b>
    </field>
</mapping>

现在这些将如何映射?我的意思是,目标对象是否包含完整的策略对象或仅包含它的 strategy.name 字段。

【问题讨论】:

    标签: java xml mapping dozer


    【解决方案1】:

    首先,默认情况下推土机映射是双向的。所以, 允许从class-a 映射到class-b,反之亦然。

    您已按如下方式完成映射:

    <field>
        <a>strategy.name</a>
        <b>strategy.name</b>
    </field>
    

    如果源对象的Strategy 对象不为空并且具有所有相关字段的值。然后推土机也会为目的地创建一个新的Strategy 对象,并且只会填充新创建的Strategy 对象的name 字段。

    此外,dozer 也适用于追溯,因此假设源和目标中Strategy 对象的所有字段的名称和类型相同。 Dozer 将自动映射或复制所有字段。因此,您不必单独映射每个字段。你只需要写如下。

    <field>
        <a>strategy</a>
        <b>strategy</b>
    </field>
    

    但是,如果您的字段名称或类型不同,您需要为每个字段定义映射,就像为 Rule 类定义 id 字段和为 RuleActivity 类定义 ruleId 字段一样。

    <field>
        <a>id</a>
        <b>ruleId</b>
    </field>
    

    希望这能澄清你的疑虑。

    【讨论】:

    • 感谢小樱的快速回复。我也相信。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多