Java 如何告诉推土机在目标字段中使用LinkedHashSet集合?
在第一节课中,我有:Java 如何告诉推土机在目标字段中使用LinkedHashSet集合?,java,mapping,dozer,Java,Mapping,Dozer,在第一节课中,我有: private Set<Country> countries; public Set<Country> getCountries() { return countries; } public void setCountries(Set<Country> countries) { this.countries = countries; } 私有集国家; 公共集getCountries(){ 返回国; } 公共国家/地区
private Set<Country> countries;
public Set<Country> getCountries() {
return countries;
}
public void setCountries(Set<Country> countries) {
this.countries = countries;
}
私有集国家;
公共集getCountries(){
返回国;
}
公共国家/地区(集合国家/地区){
这个国家=国家;
}
其中将包含LinkedHashSet实现
在第二个类中,我有相同的声明,但在映射过程中,Dozer在目标类中创建HashSet实现,这破坏了元素的顺序。如何告诉Dozer在destination类中使用LinkedHashSet?当Dozer映射一个
集合
时,它使用来创建destination集合
实例。您可以得到一个HashSet
或TreeSet
如果元素的顺序与其自然顺序相同,则可以在目标中使用。如果没有,那么您需要自己创建目标对象,并提供所需的Set
实现
除了使用默认构造函数之外,Dozer还允许使用custom或custom来实例化对象,因此您可以使用以下任一方法:
创建方法
Java代码:
public class MyInstanceCreator {
public static DestinationObject createDestinationObject() {
DestinationObject result = new DestinationObject();
result.setCountries(new LinkedHashSet<Country>());
return result;
}
private MyInstanceCreator() { }
}
public class MyBeanFactory implements BeanFactory {
public Object createBean(Object source, Class<?> sourceClass, String targetBeanId) {
DestinationObject result = new DestinationObject();
result.setCountries(new LinkedHashSet<Country>());
return result;
}
}
公共类MyInstanceCreator{
公共静态DestinationObject createDestinationObject(){
DestinationObject结果=新建DestinationObject();
result.setCountries(新LinkedHashSet());
返回结果;
}
私有MyInstanceCreator(){}
}
映射:
<mapping>
<class-a create-method="MyInstanceCreator.createDestinationObject">DestinationObject</class-a>
<class-b>SourceObject</class-b>
<field>
<a>countries</a>
<b>countries</b>
</field>
</mapping>
<mapping>
<class-a bean-factory="MyBeanFactory">DestinationObject</class-a>
<class-b>SourceObject</class-b>
<field>
<a>countries</a>
<b>countries</b>
</field>
</mapping>
目标对象
源对象
国家
国家
豆工厂
Java代码:
public class MyInstanceCreator {
public static DestinationObject createDestinationObject() {
DestinationObject result = new DestinationObject();
result.setCountries(new LinkedHashSet<Country>());
return result;
}
private MyInstanceCreator() { }
}
public class MyBeanFactory implements BeanFactory {
public Object createBean(Object source, Class<?> sourceClass, String targetBeanId) {
DestinationObject result = new DestinationObject();
result.setCountries(new LinkedHashSet<Country>());
return result;
}
}
公共类MyBeanFactory实现BeanFactory{
公共对象createBean(对象源、类sourceClass、字符串targetBeanId){
DestinationObject结果=新建DestinationObject();
result.setCountries(新LinkedHashSet());
返回结果;
}
}
映射:
<mapping>
<class-a create-method="MyInstanceCreator.createDestinationObject">DestinationObject</class-a>
<class-b>SourceObject</class-b>
<field>
<a>countries</a>
<b>countries</b>
</field>
</mapping>
<mapping>
<class-a bean-factory="MyBeanFactory">DestinationObject</class-a>
<class-b>SourceObject</class-b>
<field>
<a>countries</a>
<b>countries</b>
</field>
</mapping>
目标对象
源对象
国家
国家