2011-12-12 5 views
4

I가 다음 도메인 구조 :유형이있는 필드를 도저와 추상 클래스로 매핑하는 방법은 무엇입니까?

<mapping> 
    <class-a>Person</class-a> 
    <class-b>PersonDTO</class-b> 
</mapping> 
<mapping> 
    <class-a>Employer</class-a> 
    <class-b>PersonDTO</class-b> 
</mapping> 
<mapping> 
    <class-a>Contract</class-a> 
    <class-b>ContractDTO</class-b> 
</mapping> 

가 내 문제가 있기 때문에에 B에서 필드 Contract.contractor의 매핑에 관한 : 이제

abstract class Person { String name; //with getter and setter } 
class Employer extends Person {} 
class Employee extends Person {} 
class Contract { Person contractor; //with getter and setter } 
class PersonDTO implements Serializable { String name; String type; //type == 'Employee' or 'Employer' } 
class ContractDTO implements Serializable { PersonDTO contractor; } 

나는이 다음 도저 매핑을 설정할 때 Contract.contractor 필드는 추상 클래스이며 도저는 인스턴스를 생성하는 방법을 추측 할 수 없습니다.

그래서 제 질문은 간단하다 : 어떻게 분야 Contract.contractor의 매핑, 그것은 type == 'Employer 경우 Employer '다른 곳 Employee의 인스턴스를 인스턴스화해야한다, 그 도저에 표시 할 수 있습니다?

도움 주셔서 감사합니다.

+0

귀하의 Person 클래스는 추상적이지만, 나는 그것이 런타임에 상속 된 클래스의 인스턴스가 있어야한다 생각? 소스 객체에 대한 계약자 속성은 어떻게 생성됩니까? –

+0

@Gonzalo 귀하의 질문을 이해할 수 없습니다. 계약자가 고용주 또는 직원 중 하나이며 런타임에, 맞습니다 메소드 setContractor (사람 계약자) – fabien7474

+0

10 개의 타워 설정, 사람은 당신이 언급 그 두 가지 유형 중 하나이며, 도저는 알아낼 수와 변환해야 콘크리트 형. Dozer는 추상 클래스의 인스턴스를 만들지 않고 런타임에 계약자가 참조하는 실제 객체 (eith 고용주 또는 직원)를 생성하려고 시도합니다. 어떤 종류의 오류가 있습니까? –

답변

0

힌트와 함께이 작업을 수행 할 수 있습니다. 다소 이런 :

<mapping> 
<class-a>Contract</class-a> 
<class-b>ContractDTO</class-b> 
<field> 
    <a>contractor</a> 
    <b>contractor</b> 
    <a-hint>your.package.Employer, your.package.Employee</a-hint> 
    <b-hint>your.DTOpackage.EmployerDTO, your.DTOpackage.EmployeeDTO</b-hint> 
</field> 
</mapping> 
+0

계약자가 Employee 인스턴스 인 경우? – fabien7474

+0

내 업데이트를 참조하십시오. 당신은 그것을 줄 수 있습니다. :-) –

관련 문제