我有以下区域结构:如何使用推土机将类型的字段映射为抽象类?
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场Contract.contractor的映射到,因为现场Contract.contractor是一个抽象类,推土机无法猜测如何实例化它。
所以我的问题很简单:我怎么能指示推土机,对于外地Contract.contractor的映射,它应该实例的Employer
如果type == 'Employer
“和其他地方Employee
一个实例?
谢谢你的帮助。
您的Person类是抽象的,但我猜它必须是运行时任何继承类的实例?如何为源对象创建承包商属性? –
@贡萨洛我不明白你的问题。承包商是雇主或雇员,它是通过setContractor(Person承包商)方法设置的 – fabien7474
这在运行时是正确的,Person是您提到的两种类型中的一种,Dozer应该能够计算出并转换正确的具体类型。推土机不会尝试创建抽象类的实例,而是尝试创建承包商在运行时引用的实际对象(即雇主或雇员)。你得到什么样的错误? –