2009-12-16 81 views
5

我很努力得到Dozer彎曲我的意志,我覺得應該是很簡單的東西。我有兩個我想要映射的類似模型,但是其中一個比另一個具有更深的層次結構,這在處理集合時會導致問題。考慮下面的類:非平凡的推土機映射

源類:

class Foo { 
    String id; 
    NameGroup nameGroup; 
    // Setters/Getters 
} 

class NameGroup { 
    private List<Name> names; 
    // Setters/Getters 
} 

class Name { 
    private String nameValue; 
    // Setters/Getters 
} 

目的地類:

class Bar { 
    private String barId; 
    private BarNames barNames; 
    // Setters/Getters 
} 

class BarNames { 
    private List<String> names; 
    // Setters/Getters 
} 

現在,我想下面的單向映射:

Foo.id -> Bar.barId // Simple enough 

但我那麼需要:

Foo.nameGroup.names.nameValue -> Bar.barNames.names 

因此,Foo.nameGroup.names中的每個Name實例都應導致String被添加到BarNames.names列表中。這可能嗎?

回答

5

只要您的「Name」類包含一個String構造函數,就可以輕鬆地使用Dozer完成。

從推土機文檔(http://dozer.sourceforge.net/documentation/simpleproperty.html)引述:由推土機映射 引擎自動執行

數據類型丁文。目前,推土機支持 以下類型的轉換:(這些 都是雙向)

...

字符串,如果複雜類型 包含一個String構造

複雜類型。 ..

我已經測試過這與您的類如上(我被困在同一個問題),它的作品完美。這裏是我使用的映射:

<mapping> 
    <class-a>com.test.bar.Bar</class-a> 
    <class-b>com.test.foo.Foo</class-b> 
    <field> 
    <a>barId</a> 
    <b>id</b> 
    </field> 
    <field> 
    <a>barNames.names</a> 
    <b>nameGroup.names</b> 
    <a-deep-index-hint>java.lang.String</a-deep-index-hint> 
    <b-deep-index-hint>com.test.foo.Name</b-deep-index-hint> 
    </field> 
</mapping> 
+0

P.S.這也適用於沒有提示 – pjmyburg 2010-01-04 10:18:17

+0

謝謝@pjmyburg - 我會放棄這一點。 – teabot 2010-01-04 11:25:18