推土机复制参考不起作用

时间:2015-09-03 07:31:01

标签: java dozer

我有jpa工具创建的实体,当我从数据库中获取实体并尝试使用dozer进行映射时,我有类似的DTO。

实体和DTO看起来像

class A                             class A1
        {                                   {
            private B b;                        private B1 b1;
            private C c;                        private C1 c;

            getter/setter                       getter/setter
        }

        class B                             class B1
        {                                   {                   
            private C c;                     private C1 c;

            getter/setter                       getter/setter
        }                                   }

        class C                             class C1
        {                                   {           
            private A a;                    private A1 a;
            private B b;                    private B1 b;

            getter/setter                   getter/setter
        }                                   }

推土机映射文件如下所示:

<mapping>
        <class-a>com.entity.A</class-a>
        <class-b>com.dto.A1</class-b>         
          <field copy-by-reference="true">
            <a>b</a>
            <b>b1</b>
          </field>
          <field copy-by-reference="true">
            <a>c</a>
            <b>c1</b>
          </field>
        </mapping>  

我得到例外:

org.dozer.MappingException: Illegal object type for the method 'setb1'. 
 Expected types: 
com.dto.B1
 Actual types: 
com.entity.B

我是Dozer的新手请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

使用copy-by-reference时,两个实体上的setter应该是相同的类型。使用这意味着Dozer不会进行任何转换/转换,只是同一个对象的简单副本。

如果您不需要此功能,请删除“按引用复制”属性,它应该有效(假设您没有任何其他复杂类型,Dozer无法自动转换)。