【问题标题】:How can Orika map objects without instantiating a new destination objectOrika 如何在不实例化新目标对象的情况下映射对象
【发布时间】:2016-03-07 19:44:48
【问题描述】:

我需要用 Orika 替换 Dozer 映射,我想知道是否可以在 Orika 中执行 mapper.map(obj1, obj2) 的 Dozer 东西?到目前为止,我已经看到,对于目的地,您只能指定类类型而不是对象,所以我假设每次都会创建一个新实例。但在这种情况下,我只需要使用 DTO 的某些字段更新先前找到的实体对象。这可能吗?

【问题讨论】:

    标签: java dto orika


    【解决方案1】:

    是的,可以将源对象 A 映射到目标类 B - 然后 Orika 将自行实例化 B - 或映射到已创建的 B 实例。

    // Let Orika create instance of B
    A source = new A();
    BoundMapperFacade<A, B> mapper = mapperFactory.getMapperFacade(A.class, B.class);
    B target = mapper.map(source);
    
    // Create instance of B yourself and let Orika fill it
    A source = new A();
    B target = new B();
    BoundMapperFacade<A, B> mapper = mapperFactory.getMapperFacade(A.class, B.class);
    mapper.map(source, target);
    

    在第二种情况下,您可以通过某种方式自己设置 target 实例 - Orika 只会将属性从 A 映射到您在 ClassMap 中定义的 B

    【讨论】:

    • 怎么办,让这种行为发生在内部对象上。
    • @ShineedBasheer - Orika 将自动实例化所有内部对象,或者如果它们存在,它将使用现有对象。
    • 但是我测试了同样的方法来映射持久对象和值对象。其实我想合并这些对象。通过在对象上保留持久化相关状态。对象很复杂,因为它包含内部对象列表,每个内部对象都具有递归结构。如您所说,Orika 映射外部对象。但对于内部对象,它正在创建新对象
    • @ShineedBasheer - 我建议您创建一个新问题,提供问题的代码示例(Minimal, Complete, and Verifiable example。仅通过 cmets 很难提供帮助。
    • 创建了一个新问题。 stackoverflow.com/questions/43275861/…
    猜你喜欢
    • 2016-09-21
    • 2015-06-19
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多