2011-12-12 2 views
4

私は、以下のドメイン構造を持っている:私はこの次ドーザマッピング設定するとき型を持つフィールドをドーザーと抽象クラスとしてどのようにマップするのですか?

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; } 

は今:

<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からAへのフィールドContract.contractorのマッピングに関するContract.contractorフィールドは抽象クラスであり、ドーザーはそれをインスタンス化する方法を推測できません。

だから私の質問は単純です:どのように私はそれをドーザする示すことができ、フィールドContract.contractorのマッピングのために、それはtype == 'Employer場合 'と他の場所EmployeeEmployerのインスタンスをインスタンス化する必要がありますか?

ありがとうございました。

+0

あなたのPersonクラスが抽象的であるが、私はそれが実行時に継承されたクラスのいずれかのインスタンスでなければならないと思いますか?ソースオブジェクトに対して請負業者属性はどのように作成されますか? –

+0

@Gonzalo私はあなたの質問を理解していません。請負業者はEmployerかEmployeeのどちらかであり、setContractor(人契約者) – fabien7474

+0

に設定されています。実行時に、Personはあなたが言及した2つのタイプのいずれか1つで、Dozerはそれを把握してコンクリートタイプ。 Dozerは抽象クラスのインスタンスを作成しようとせず、実行時に請負業者が参照する実際のオブジェクト(eith EmployerまたはEmployee)の作成を試みます。どのようなエラーが表示されていますか? –

答えて

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

ContractorがEmployeeのインスタンスの場合は? – fabien7474

+0

私の更新を参照してください。あなたはそれを撃つことができます。 :-) –

関連する問題