【问题标题】:Why does ModelMapper map collections merge-style?为什么 ModelMapper 地图集合合并样式?
【发布时间】:2019-03-16 19:48:40
【问题描述】:

在我的应用程序中,我使用 ModelMapper 库将数据传输对象映射到实体。

一个实体 Library 有一个集合 (java.util.Set),其中包含其他实体 Book。 用户应该能够更改集合内容。

在这种情况下,使用数据传输对象 UpdateDTO,其中包含要存储在集合中的实体 Book 的标识符。

后端使用ModelMapperUpdateDTO 映射到实体Library

现在假设用户从Library 的集合中删除了一个实体BookUpdateDTO 现在包含 Book 的所有实体的列表,但不包括被用户删除的实体。

ModelMapperUpdateDTO 映射到实体Library 时,我希望该集合缺少用户删除的实体Book。但与我的预期不同,返回的实体 Library 仍然包含所有 Book 实体。

为什么会这样?我已将“问题”归结为CollectionConverter [0] 中的这些行。

[0]https://github.com/modelmapper/modelmapper/blob/master/core/src/main/java/org/modelmapper/internal/converter/CollectionConverter.java#L62-L63

【问题讨论】:

    标签: java modelmapper


    【解决方案1】:

    ModelMapper 的存储库包含关于同一问题的问题 [0],解释了当前实现的工作原理和代码,因此如果源大小小于目标大小,ModelMapper 将删除项目。

    [0]https://github.com/modelmapper/modelmapper/issues/423

    【讨论】:

      【解决方案2】:

      合并列表默认为true,但您可以将其关闭:

      ModelMapper mapper = new ModelMapper();
      mapper.getConfiguration().setCollectionsMergeEnabled(false);
      

      见: http://modelmapper.org/user-manual/configuration/

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多