为什么 ModelMapper 映射集合合并样式?

Why does ModelMapper map collections merge-style?

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

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

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

后端使用 ModelMapper.

UpdateDTO 映射到实体 Library

现在假设用户从 Library 的集合中删除实体 BookUpdateDTO 现在包含 Book 的所有实体的列表,没有被用户删除的实体。

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

这是为什么? 我已将 'problem' 固定到 CollectionConverter [0].

中的这些行

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

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

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

默认情况下合并列表为真,但您可以将其关闭:

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

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