【问题标题】:How to map a composition relationship?如何映射组合关系?
【发布时间】:2012-10-17 17:20:37
【问题描述】:

我想在不使用 Dozer 的深度映射属性的情况下映射合成。

另一个重要的元素是组合类和主类映射到同一个类

我已经搜索过 SO,Dozer 文档(顺便说一句很好),但我仍然没有找到我要找的东西

示例:A 和 B -> C

Class A {
  B b
  a1
}

Class B {
  b1
  b2
}

Class C {
  ca1
  cb1
  cb2

}

我不想像这样映射:

<mapping>
  <class-a>A</class-a>
  <class-b>C</class-b>
  <field>
    <a>b.b1</a>
    <b>cb1</b>
  </field>
  etc.
</mapping>

我想使用类似的东西:

<mapping>
  <class-a>B</class-a>
  <class-b>C</class-b>
  <field>
    <a>b1</a>
    <b>cb1</b>
  </field>
  etc.
</mapping>
<mapping>
  <class-a>A</class-a>
  <class-b>C</class-b>
  <field>
    <a>a1</a>
    <b>ca1</b>
  </field>
</mapping>

我的 B 类与其他类的作文一起使用。

我想尊重 DRY(不要重复自己)。

【问题讨论】:

    标签: java dozer


    【解决方案1】:

    您不必指定深度映射,您应该能够说出 B1 是如何映射到 B2 的:

    <mapping>
      <class-a>B1</class-a>
      <class-b>B2</class-b>
      <field>
        <a>b1Param1</a>
        <b>b2Param1</b>
      </field>
    </mapping>
    

    作为一个单独的映射,A1 如何映射到 A2(但不是组合类的子映射):

    <mapping>
      <class-a>A1</class-a>
      <class-b>A2</class-b>
      <field>
        <a>b1</a>
        <b>b2</b>
      </field>
    </mapping>
    

    Dozer 将识别 b1 和 b2 是特定类的对象,并寻找两者之间的映射,该映射可以作为单独的映射提供。

    【讨论】:

    • 嗨,我编辑了我的问题以更具体地说明我的问题。
    【解决方案2】:

    不幸的是,除了使用深度映射并重复它之外,没有解决方案。
    问题在于 Dozer 映射 C -> A 和 B。这并不容易。

    一种解决方案是在“单向”映射的情况下启用这种类型的自动映射。

    复杂的问题,类似这个Dozer FAQ

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多