推土场 - 排除单向私有财产给出错误

时间:2013-11-14 17:25:05

标签: java-7 private-members dozer

在标题中,我正在尝试映射2个类,但其中一个类具有私有属性的私有属性。

public Class A {
 private String propertyA;
 private String propertyB;

 ClassA (){
 }
 public String getPropertyA() {
    return propertyA;
 }

 public void setPropertyA(String propertyA) {
    this.propertyA= propertyA;
 }
 public String getPropertyB() {
    return propertyB;
 }

 public void setPropertyB(String propertyB) {
    this.propertyB= propertyB;
 }
} 


public Class B {
 private String propertyA;
 private String propertyB;

 ClassB (String propertyB){
   propertyB = propertyB;
 }
 public String getPropertyA() {
    return propertyA;
 }

 public void setPropertyA(String propertyA) {
    this.propertyA= propertyA;
 }
 public String getPropertyB() {
    return propertyB;
 }

 void setPropertyB(String propertyB) {
    this.propertyB= propertyB;
 }
} 

我想将对象从A类映射到B类,反之亦然,唯一的区别是不需要在从A类到B的映射中设置propertyB。 我已经尝试了以下配置:

 <mapping>
  <class-a map-null="false">classA</class-a>
  <class-b>classB</class-b>
  <field>
       <a get-method="getPropertyA" set-method="setPropertyA">propertyA</a>
 <b get-method="getPropertyA" set-method="setPropertyA">propertyA</b>
  </field>
  <field-exclude type="one-way">
       <a get-method="getPropertyB" set-method="setPropertyB">propertyB</a>
       <b get-method="getPropertyB">propertyB</b>
  </field-exclude>
</mapping>

这给了我一个例外:类classB的属性propertyB无法写入。 这是我对私人财产的意图,但不管我做什么,例外仍然存在。我试图添加一个type =“one-way”的字段映射,但这给了我同样的异常。 有没有办法用Dozer做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为您要寻找的是将is-accessible="true"添加到propertyB classB的定义中。这通知Dozer它应该直接访问属性,而不是通过getter或setter。

如果他们遵循bean标准,则不必指定所有getter和setter。此外,如果某个字段使用bean标准进行双向映射,则您根本不必指定它。这意味着你的XML 应该能够看起来像这样:

<mapping>
  <class-a map-null="false">classA</class-a>
  <class-b>classB</class-b>
  <field-exclude type="one-way">
       <a>propertyB</a>
       <b is-accessible="true">propertyB</b>
  </field-exclude>
</mapping>