2011-12-12 1 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> 

Моя проблема касается отображение поля Contract.contractor от В к А потому, поле Contract.contractor является абстрактным классом, а бульдозер не может догадаться, как его инициировать.

Так что мой вопрос прост: как я могу указать Dozer, что для отображения поля Contract.contractor, он должен создать экземпляр экземпляр Employer если type == 'Employer "и в других местах Employee?

Благодарим за помощь.

+0

Ваш класс Person является абстрактным, но я предполагаю, что это должен быть экземпляром любого из наследуемых классов во время выполнения? Как создается атрибут подрядчика для исходного объекта? –

+0

@ Гонсало Я не понимаю ваш вопрос. подрядчиком является либо Работодатель, либо Сотрудник, и он настроен на метод setContractor (Лицо-подрядчик) – fabien7474

+0

Это правильно, во время выполнения Person является либо одним из этих двух типов, о котором вы упоминаете, и 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

И если подрядчик является экземпляром Employee? – fabien7474

+0

Смотрите мое обновление. Вы можете дать ему шанс. :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^