2009-12-16 14 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 

तो प्रत्येक Name उदाहरण Foo.nameGroup.names में StringBarNames.names सूची में जोड़ा जाना चाहिए। क्या यह संभव है?

उत्तर

5

यह आसानी से डोज़र के साथ किया जा सकता है जब तक कि आपके "नाम" वर्ग में स्ट्रिंग कन्स्ट्रक्टर होता है।

डोजर डॉक्स (http://dozer.sourceforge.net/documentation/simpleproperty.html) से एक उद्धरण:

डेटा प्रकार coversion डोजर मानचित्रण इंजन द्वारा स्वचालित रूप से किया जाता है। (इन सभी द्वि-दिशात्मक हैं)

...

परिसर प्रकार यदि परिसर प्रकार एक स्ट्रिंग निर्माता

शामिल करने के लिए स्ट्रिंग: वर्तमान में, डोजर रूपांतरणों की निम्नलिखित प्रकार का समर्थन करता है। ..

मैंने उपरोक्त के रूप में आपके वर्गों के साथ इसका परीक्षण किया है (मैं एक ही समस्या से फंस गया था) और यह पूरी तरह से काम करता है। यहां मैपिंग का उपयोग किया गया है:

<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

पीएस यह संकेतों के बिना भी काम करता है – pjmyburg

+0

धन्यवाद @pjmyburg - मैं इसे एक दूंगा। – teabot

संबंधित मुद्दे