2013-11-26 3 views
0

Dozer에서 매핑하는 데 어려움을 겪고 있습니다.Dozer에서만 색인 생성 된 getter

class Foo { 

    private String someString; 

    public String getSomeString() { 
     return someString; 
    } 

    public void setSomeString(String someString) { 
     this.someString = someString; 
    } 
} 

과 흥미로운 부분 : 내 수업의 기본 구조는 이것이다

class Bar { 

    // note that no field is declared 

    public String[0] getSomeBarString() { 
     // This returns an array where the acctually desired string is a index 0 
    } 

    public void setSomeBarString(String someString) { 
     // stores the string otherwise 
    } 
} 

필드의 부재를 보상하고, 다른 이름 게터/세터 메소드를 매우 간단했다 :

<mapping> 
    <class-a>Foo</class-a> 
    <class-b>Bar</class-b> 
    <field> 
     <a>someString</a> 
     <b get-method="getSomeBarString" set-method="setSomeBarString">someBarString</b> 
    </field> 
</mapping> 

필자는 기본적으로 필드 액세스가 없기 때문에 get-methodset-method을 생략 할 수도 있습니다.

제 문제는 getter가 인덱싱되고 setter가 인덱싱되지 않는다는 것입니다. 나는 이미 indexed property mapping에 대해 읽었지만 두 가지 모두를 수행합니다. 한 방향으로 만 색인을 생성하는 방법이 있습니까? 예 : get-method="getSomeBarString[0]"님께 도움을 받으시겠습니까?

답변

0

잠자는 밤에 나에게는 나 자신의 생각이 들었다. 두 개의 편도 매핑을 정의하고 그 중 하나를 인덱싱합니다. 또한 인덱싱은 다른 get-method 또는 set-method을 선언하더라도 동일한 방식으로 (속성 이름 뒤에) 정의됩니다.

<mapping type="one-way"> 
    <class-a>Foo</class-a> 
    <class-b>Bar</class-b> 
    <field> 
     <a>someString</a> 
     <b set-method="setSomeBarString">someBarString</b> 
    </field> 
</mapping> 

<mapping type="one-way"> 
    <class-a>Bar</class-a> 
    <class-b>Foo</class-b> 
    <field> 
     <a get-method="getSomeBarString">someBarString[0]</a> 
     <b>someString</b> 
    </field> 
</mapping>