[英]Dozer Mapping Confusion
我對推土機如何將源對象映射到目標對象感到困惑。 我有以下情況:
源對象:
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字段。
首先,默認情況下,推土機映射是雙向的。 因此,允許從class-a
class-b
映射到class-b
,反之亦然。
完成映射后,如下所示:
<field>
<a>strategy.name</a>
<b>strategy.name</b>
</field>
如果源對象具有不為null且具有所有相關字段值的Strategy
對象。 然后推土機還將為目的地創建一個新的Strategy
對象,並且只會填充新創建的Strategy
對象的name
字段。
此外,推土機還可以進行追溯,因此假設源和目標中Strategy
對象所有字段的名稱和類型相同。 推土機將自動映射或復制所有字段。 因此,您不必分別映射每個字段。 您只需要編寫以下內容。
<field>
<a>strategy</a>
<b>strategy</b>
</field>
但是如果你的字段名稱或類型不一樣,你需要定義為你做的每個字段映射id
字段Rule
類和ruleId
領域RuleActivity
類。
<field>
<a>id</a>
<b>ruleId</b>
</field>
希望這可以澄清您的疑問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.