当前位置: 首页 > 知识库问答 >
问题:

Mapstruct中的CycleAvaidingMapperContext清理

曾嘉言
2023-03-14
@Component
public class CycleAvoidingMappingContext {
    private Map<Object, Object> knownInstances = new IdentityHashMap<Object, Object>();

    @BeforeMapping
    public <T> T getMappedInstance(Object source, @TargetType Class<T> targetType) {
        return (T) knownInstances.get( source );
    }

    @BeforeMapping
    public void storeMappedInstance(Object source, @MappingTarget Object target) {
        knownInstances.put( source, target );
    }
}

共有1个答案

申屠乐池
2023-03-14

您引用的示例是mapstruct-mapping-with-cycles的一部分,在这里它没有用作Spring bean。

CycleAvaidingMapperContext的思想是用作@Context属性。

每次将其传递给映射方法时,都将创建一个新实例。

 类似资料:
  • 我在找像这样的东西 其中来自application.properties文件。

  • } 但是在映射器实现中,我看到清除了Target的列表,我不需要它: } 我是读错了还是做错了?

  • 问题内容: 我尝试将DTO对象映射到我的JPA实体。我有一个集合在我的。可以添加它们。Mapstruct通过(http://mapstruct.org/documentation/dev/reference/html/#collection- mapping- strategies )支持使用加法器。 如果创建新实体,此方法效果很好,但是在添加新子代之前,在更新时无法清除子代。 Mapstruct

  • 我尝试将DTO对象映射到JPA实体。我在我的父母实体中有一个孩子的集合。可以添加它们。Mapstruct通过(http://mapstruct.org/documentation/dev/reference/html/#collection-映射策略)。 如果我创建了新实体,但在添加新子实体之前,无法在更新时清除子实体,则此操作可以正常工作。 Mapstruct手册说(http://mapstru

  • 我有下面的班级结构。 问题1:方法将对象作为参数并返回字符串,它只是返回一个空字符串对象,而不是设置字符串的属性并返回它。为什么?如何返回对象的属性? 问题2:当map方法的参数名为时,它使用类中的属性生成实现,否则只生成空的对象。我很惊讶地发现mapstruct生成的不同实现也取决于参数名。有什么解释吗? 注意:对象在另一个对象中用作属性。在那里我需要上面提到的行为。现在我是这样管理的。@map

  • 当使用“JSR330”componentModel使用MapStruct生成映射器实现时,micronaut将在运行时尝试注入这些实现时抛出一个NoSuchBeanException。 一个解决办法是使用提供程序来提供映射器对象,但生成的代码应该可以工作。 映射器定义: 控制器: pom.xml摘录: 当调用控制器上的方法时,我会期望Micronaut找到Mapstruct生成的类(它用@sing