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

如何忽略创建集合的方法

邢飞鸿
2023-03-14

Mapstruct使用我自己的无参数方法作为List的工厂(而不是构造函数)

我试着映射一些对象树,应该逐级构建。我有一种硬编码根节点的方法和另一种方法,用于将实体映射到节点。所以我有一个生成根名称列表的方法,和映射的抽象方法。

@Mapper
public abstract class TestMapper {

public List<Name> rootNames() {
    List<Name> names = new ArrayList<>();
    names.add(Name.build("Homer"));
    names.add(Name.build("Marge"));
    return names;
}

@Mapping(target = "name", source = "name")
public abstract Name childrenName(FullName simpson);

public abstract List<Name> childredNames(List<FullName> children);

public static class Name {
    private String name;

    public static Name build(String value) {
        Name name = new Name();
        name.setName(value);
        return name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public static class FullName {
    private String name;
    private String lastName;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

}

所以在生成的代码中,“childrenNames”看起来像@Override public List childrenNames(List children){if(children==null){return null;}

    List<Name> list = rootNames();
    for ( FullName fullName : children ) {
        list.add( simpsonName( fullName ) );
    }

    return list;
}

如何将我的rootNames方法标记为忽略映射?

顺致敬意,阿列克谢

共有1个答案

穆高澹
2023-03-14

如票据中所述https://github.com/mapstruct/mapstruct/issues/1725您应该将命名的注释添加到您的rootNames()方法中。如果没有注释,MapStruct将自动将其作为对象工厂拾取(请参见http://mapstruct.org/documentation/dev/reference/html/#object-工厂)。

一旦一个方法被注释为命名的,它只有在被明确引用时才会被提取。

@org.mapstruct.Named("rootNames")
public List<Name> rootNames() {
    List<Name> names = new ArrayList<>();
    names.add(Name.build("Homer"));
    names.add(Name.build("Marge"));
    return names;
}
 类似资料:
  • 我有以下内容: 我想忽略在RegimenEntity中设置的regimenDrugs内的所有RegimenDrugEntity对象的id。 此映射(target=“regimenDrugs.id”,ignore=true)不编译。

  • 问题内容: 这个问题本质上是相反的这一个 我有这样的方法: 当我加载它时,Hibernate抱怨我没有称为的属性。但是我不想要一个叫做-我不需要存储数据的属性-这仅仅是逻辑。 hibernate状态: org.hibernate.PropertyNotFoundException:在com.mycomp.myclass类中找不到空置属性的设置器… 我可以在方法中添加注释以使Hibernate忽略它

  • 我想在 中使用 trait 对象。在C中,我可以制作一个基类,从中派生出和。然后我可以创建一个

  • MongoDB 中的集合是一组文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合存在于数据库中,且没有固定的结构,您可以向集合中插入不同格式或类型的数据。 在 MongoDB 中,您可以使用 createCollection() 方法来创建集合,语法格式如下: db.createCollection(name, options) 参数说明如下: name: 要创建的集合名称; op

  • 本文向大家介绍详解MongoDB中创建集合与删除集合的操作方法,包括了详解MongoDB中创建集合与删除集合的操作方法的使用技巧和注意事项,需要的朋友参考一下 创建集合:createCollection() 方法  是用来创建集合. 语法: 基本的 createCollection() 命令语法如下: 在命令中, name 是要创建的集合的名称. Options 是一个文件,用于指定配置的集合 参

  • 我读过@JsonInclude这样的问题来忽略空值。这适用于实体中的常规字段,但不适用于集合。如果实体中的集合为空,Json序列化会给出一个空值。 如何对集合进行等效忽略?