سؤال

أنا تكافح للحصول على درج للانحناء إلى إرادتي لشعور أشعر أنه يجب أن أكون بسيطا للغاية. لدي نموذجان مماثلان أود تعيينه بينهما، ولكن يتمتع المرء بالتسلسل الهرمي "أعمق" من الآخر وهذا يسببني مشاكل عند التعامل مع المجموعات. النظر في الفصول التالية:

فصول المصدر:

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 يجب أن يؤدي إلى String يجري إضافة إلى BarNames.names قائمة. هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

يمكن بسهولة القيام بذلك بسهولة مع DAZER طالما يحتوي فئة "الاسم" على منشئ سلسلة.

اقتباس من مستندات Dozer (http://dozer.sourceforge.net/documentation/simpleproperty.html):

يتم تنفيذ نوع البيانات تلقائيا بواسطة محرك رسم الخرائط DAZER. حاليا، تدعم Dozer الأنواع التالية من التحويلات: (هذه كلها ثنائية الاتجاه)

...

سلسلة إلى نوع معقدة إذا كان النوع المعقد يحتوي على منشئ سلسلة

...

لقد اختبرت هذا مع فصولك على النحو الوارد أعلاه (كنت عالقا مع نفس المشكلة) ويعمل تماما. هنا هو رسم الخرائط التي استخدمتها:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top