首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dozer映射混淆

Dozer映射混淆
EN

Stack Overflow用户
提问于 2014-04-09 11:36:58
回答 1查看 780关注 0票数 1

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

源对象:

代码语言:javascript
复制
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
}

目标对象:

代码语言:javascript
复制
public class RuleActivity {
private String id;
private String name;
private Strategy strategy;
// getters and setters
}

XML映射:

代码语言:javascript
复制
<?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字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 11:44:36

首先,默认情况下,dozer映射是双向的。因此,允许从class-a映射到class-b,反之亦然.

如下所示,您已经完成了映射:

代码语言:javascript
复制
<field>
    <a>strategy.name</a>
    <b>strategy.name</b>
</field>

如果源对象具有一个非空的Strategy对象,并且具有所有相关字段的值。然后dozer也将为目标创建一个新的Strategy对象,并且只填充新创建的Strategy对象的name字段。

此外,dozer还可以追溯,因此假设源和目的地中Strategy对象的所有字段的名称和类型是相同的。Dozer将自动映射或复制所有字段。所以你不需要单独绘制每个字段的地图。你只需要按下面写就行了。

代码语言:javascript
复制
<field>
    <a>strategy</a>
    <b>strategy</b>
</field>

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

代码语言:javascript
复制
<field>
    <a>id</a>
    <b>ruleId</b>
</field>

希望这能澄清你的疑虑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22961292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档