Как сопоставить поле с типом как абстрактный класс с dozer? - PullRequest
4 голосов
/ 12 декабря 2011

У меня следующая доменная структура:

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 из B в A, поскольку поле Contract.contractor является абстрактным классом, и бульдозер не может угадать, как его создать.

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

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 22 февраля 2012

Вы можете сделать это с подсказками.Примерно так:

<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>
...