У меня есть следующая структура домена:Как сопоставить поле с типом в виде абстрактного класса с бульдозером?
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
?
Благодарим за помощь.
Ваш класс Person является абстрактным, но я предполагаю, что это должен быть экземпляром любого из наследуемых классов во время выполнения? Как создается атрибут подрядчика для исходного объекта? –
@ Гонсало Я не понимаю ваш вопрос. подрядчиком является либо Работодатель, либо Сотрудник, и он настроен на метод setContractor (Лицо-подрядчик) – fabien7474
Это правильно, во время выполнения Person является либо одним из этих двух типов, о котором вы упоминаете, и Dozer должен иметь возможность понять это и преобразовать бетонный тип правильно. Dozer не будет пытаться создать экземпляр абстрактного класса, а фактический объект, на который ссылаются подрядчики во время выполнения (eith Employer или Employee). Какие ошибки вы получаете? –