【问题标题】:How to tell Dozer to use LinkedHashSet collection in destination field?如何告诉 Dozer 在目标字段中使用 LinkedHashSet 集合?
【发布时间】:2012-06-08 09:35:04
【问题描述】:

在头等舱我有字段:

private Set<Country> countries;

public Set<Country> getCountries() {
    return countries;
}

public void setCountries(Set<Country> countries) {
    this.countries = countries;
}

其中将包含 LinkedHashSet 实现。

在第二类中我有相同的声明,但是在映射过程中,Dozer 在目标类中创建了 HashSet 实现,这破坏了元素的顺序。如何告诉 Dozer 在目标类中使用 LinkedHashSet?

【问题讨论】:

    标签: java mapping dozer


    【解决方案1】:

    当 Dozer 映射 Set 时,它使用 org.dozer.util.CollectionUtils.createNewSet 创建目标 Set 实例。您会得到HashSetTreeSet

    如果您的元素的顺序与其自然顺序相同,您可以在目标中使用SortedSet。如果没有,那么您需要自己创建目标对象并提供所需的Set 实现。

    Dozer 允许使用自定义 create methods 或自定义 bean factories 来实例化对象,而不是使用默认构造函数,因此您可以使用任一方法:

    创建方法

    Java 代码:

    public class MyInstanceCreator {
        public static DestinationObject createDestinationObject() {
            DestinationObject result = new DestinationObject();
            result.setCountries(new LinkedHashSet<Country>());
            return result;
        }
        private 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>
    

    豆工厂

    Java 代码:

    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;
        }
    }
    

    映射:

    <mapping>
        <class-a bean-factory="MyBeanFactory">DestinationObject</class-a>
        <class-b>SourceObject</class-b>
        <field>
            <a>countries</a>
            <b>countries</b>
        </field>
    </mapping>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多