无法映射属性,考虑声明/实现映射方法

时间:2021-04-14 14:29:10

标签: java spring mapstruct

当我尝试编译我的应用程序时,它向我显示了这个错误,整个应用程序是用 Jhipster 生成的。

详细描述错误:[ERROR] /C:/Users/user/Desktop/Devs/CURTIPIELES/curti-back/src/main/java/com/curtipieles/app/service/mapper/LeatherMapper.java:[21 ,16] 无法将属性“com.curtipieles.app.domain.Usage Leather.usage.usage”映射到“java.lang.String usageName”。考虑声明/实现一个映射方法:“java.lang.String map(com.curtipieles.app.domain.Usage value)”。

错误
image

这是我的 LeatherMapper:

@Mapper(componentModel = "spring", uses = {LeatherFamilyMapper.class, LeatherHasColorMapper.class, LeatherHasUsageMapper.class})
public interface LeatherMapper extends EntityMapper<LeatherDTO, Leather> {

    @Mapping(source = "family.id", target = "familyId")
    @Mapping(source = "family.name", target = "familyName")
    @Mapping(source = "color.id", target = "colorId")
    @Mapping(source = "color.id", target = "colorName")
    @Mapping(source = "usage.id", target = "usageId")
    @Mapping(source = "usage.usage", target = "usageName")
    LeatherDTO toDto(Leather leather);

    @Mapping(source = "familyId", target = "family")
    @Mapping(source = "colorId", target = "color")
    @Mapping(source = "usageId", target = "usage")
    Leather toEntity(LeatherDTO leatherDTO);

    default Leather fromId(Long id) {
        if (id == null) {
            return null;
        }
        Leather leather = new Leather();
        leather.setId(id);
        return leather;
    }
}

这是我的 LeatherDTO(我没有把 Getter 和 Setter 放在一起,以免把问题拖长太多)

public class LeatherDTO implements Serializable {
    private Long id;

    private String imageUrl;

    private String name;

    private String description;

    private Boolean status;

    private Instant creationDate;

    private Boolean isNew;


    private Long familyId;

    private String familyName;

    private Long colorId;

    private String colorName;

    private Long usageId;

    private String usageName;

这是我的皮革课:

@Entity
@Table(name = "leather")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Leather implements Serializable {
    private static final long serialVersionUID = 1L;

   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 
    "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "image_url")
    private String imageUrl;

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "status")
    private Boolean status;

    @Column(name = "creation_date")
    private Instant creationDate;

    @Column(name = "is_new")
    private Boolean isNew;

    @ManyToOne
    @JsonIgnoreProperties(value = "leathers", allowSetters = true)
    private LeatherFamily family;

    @ManyToOne
    @JsonIgnoreProperties(value = "leathers", allowSetters = true)
    private LeatherHasColor color;

    @ManyToOne
    @JsonIgnoreProperties(value = "leathers", allowSetters = true)
    private LeatherHasUsage usage;

这是我的 LeatherHasUsage 类:

@Entity
@Table(name = "leather_has_usage")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class LeatherHasUsage implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 
    "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "status")
    private Boolean status;

    @ManyToOne
    @JsonIgnoreProperties(value = "leatherHasUsages", allowSetters = true)
    private Usage usage;

    // jhipster-needle-entity-add-field - JHipster will add fields here
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Boolean isStatus() {
        return status;
    }

    public LeatherHasUsage status(Boolean status) {
        this.status = status;
        return this;
    }

这是我的 LeatherHasColor 类:

@Entity
@Table(name = "leather_has_color")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class LeatherHasColor implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "status")
    private Boolean status;

    @ManyToOne
    @JsonIgnoreProperties(value = "leatherHasColors", allowSetters = true)
    private Color color;

这是我的 LeatherFamily 课程

@Entity
@Table(name = "leather_family")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class LeatherFamily implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 
    "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "image_url")
    private String imageUrl;

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "status")
    private Boolean status;

    @Column(name = "is_new")
    private Boolean isNew;

    @Column(name = "creation_date")
    private Instant creationDate;

1 个答案:

答案 0 :(得分:0)

这是问题的解决方案

<块引用>

您将“usage.usage”更改为“usage.usage.usage”,并且可能还将“usage.id”更改为“usage.usage.id”,因为您似乎忘记了您有一个额外级别的对象,并且对颜色做类似的改变,你的代码应该都是固定的。 - comment by Andreas