2009-12-16 6 views
5

Dozer을 내 의지에 맞게 구부리기 위해 고심하고 있습니다. 나는 두 모델을 매핑하고 싶습니다. 그러나 하나는 다른 모델보다 더 깊은 계층 구조를 가지고 있으며, 이는 컬렉션을 다룰 때 문제가됩니다.평범하지 않은 도저 매핑

소스 클래스 :

class Foo { 
    String id; 
    NameGroup nameGroup; 
    // Setters/Getters 
} 

class NameGroup { 
    private List<Name> names; 
    // Setters/Getters 
} 

class Name { 
    private String nameValue; 
    // Setters/Getters 
} 

대상 클래스 :

Foo.id -> Bar.barId // Simple enough 

그러나 I :

class Bar { 
    private String barId; 
    private BarNames barNames; 
    // Setters/Getters 
} 

class BarNames { 
    private List<String> names; 
    // Setters/Getters 
} 

지금 나는 다음과 같은 단방향 매핑하고자 다음과 같은 클래스 고려 필요하다 :

Foo.nameGroup.names.nameValue -> Bar.barNames.names 

Name 인스턴스가 Foo.nameGroup.names 일 경우 목록에 String이 추가되어야합니다. 이것이 가능한가?

답변

5

"Name"클래스에 String 생성자가 포함되어 있으면 Dozer에서 쉽게 수행 할 수 있습니다.

도저 문서 (http://dozer.sourceforge.net/documentation/simpleproperty.html)에서 인용 :

데이터 유형 coversion는 도저 매핑 엔진 자동 을 행한다. (이 모든 양방향입니다)

...

문자열 복합 형 는 문자열 생성자

가 포함되어있는 경우 단지 형식에 : 현재, 도저 전환의 다음과 같은 유형을 지원합니다. ..

위와 같이 클래스를 테스트했는데 (동일한 문제가 발생했습니다) 완벽하게 작동합니다. 다음은 내가 사용한 매핑입니다.

<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> 
+0

P.S. 이것은 힌트 없이도 작동합니다. – pjmyburg

+0

고마워요. @pjmyburg - 이것에 대해 알려 드리겠습니다. – teabot

관련 문제