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>

目标对象
源对象
国家
国家