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

Mapstruct问题:未知属性错误,但属性存在

长孙阳泽
2023-03-14

我在使用:

    null
    null
error: Unknown property "settlementCentre" in result type ru.rt.eip.boot.domain.ClientDto. Did you mean "null"?

令人惊讶的是,但是toModel方法工作得很好,编译后,我在生成的源代码中看到了下面的内容:

@Override
Client toModel(ClientDto clientDto) {
    if ( clientDto == null ) {
        return null;
    }

    Client client = new Client();

    if ( clientDto.getSettlementCentre() != null ) {
        client.setSettlementCentre( settlementCentreDtoToSettlementCentre( clientDto.getSettlementCentre() ) );
    }
    else {
        client.setSettlementCentre( null );
    }
}

我不知道如何修复这个映射问题。有人能帮忙吗?

下面是我的映射器:

@Mapper(
        componentModel = "spring",
        unmappedTargetPolicy = ReportingPolicy.IGNORE,
        uses = {EntityIdMapper.class,
                LegalFormMapper.class,
                EmployeeMapper.class,
                SettlementTypeMapper.class,
                TrippingDisabledReasonMapper.class,
                ProprietaryFormMapper.class,
                BillingGroupMapper.class,
                SettlementCentreMapper.class,
                ClientClassMapper.class,
                ClientCategoryMapper.class,
                DepartmentMapper.class},
        injectionStrategy = InjectionStrategy.CONSTRUCTOR
)
public abstract class ClientMapper {

    @Mappings({
            @Mapping(source = "client.parent.id", target = "parentId"),
            @Mapping(target = "isVip", defaultValue = "false"),
            @Mapping(target = "isSpecial", defaultValue = "false"),
            @Mapping(target = "includeToDebtor", defaultValue = "false"),
            @Mapping(target = "excludeFromInform", defaultValue = "false"),
            @Mapping(source = "client.passport", target = "passport", defaultExpression = "java(null)"),
            @Mapping(source = "client.trippingDisabledReason", target = "trippingDisabledReason", defaultExpression = "java(null)"),
            @Mapping(source = "client.proprietaryForm", target = "proprietaryForm", defaultExpression = "java(null)"),
            @Mapping(source = "client.billingGroup", target = "billingGroup", defaultExpression = "java(null)"),
            @Mapping(source = "client.clientClass", target = "clientClass", defaultExpression = "java(null)"),
            @Mapping(source = "client.settlementCentre", target = "settlementCentre")
    })
    abstract ClientDto toDto(Client client);

    @Mapping(source = "clientDto.settlementCentre", target = "settlementCentre", defaultExpression = "java(null)")
    abstract Client toModel(final ClientDto clientDto);
}
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ClientDto implements BusinessObject, WithParent {
    private EntityIdDto id;
    private String dtype;
    @Deprecated //SystemInfo
    private Long currentVersion;
    private String juridicalType;
    private String nls;
    private String nlsAdditional;
    private String inn;
    private String kpp;
    private String title;
    private String shortName;
    private String juridicalName;
    private String email;
    private String phone;
    private Boolean isVip;
    @Deprecated //SystemInfo
    private Boolean isDeleted;
    private Boolean isSpecial;
    private LocalDateTime changeDate;
    @Deprecated //SystemInfo
    private LocalDateTime persistDate;
    @Deprecated //SystemInfo
    private LocalDateTime endDate;
    @Deprecated //SystemInfo
    private LocalDateTime localsystemdatesnapshot;
    private String settlementAccount;
    private String bik;
    private String contact;
    private String companyUrl;
    private String inetSystemCode;
    private Boolean includeToDebtor;
    private Boolean excludeFromInform;
    private String deliveryArea;
    private String passport;
    private String fldFilialName;
    private String fldDocumentUnId;
    @Deprecated //parent
    private EntityIdDto parentId;
    private DepartmentDto department;
    private DepartmentDto ownerFilial;
    private SettlementTypeDto settlementType;
    private ClientClassB2BDto clientClassB2B;
    private String fldClientAttributes;
    private String regionId;
    @Deprecated // Address
    private Map<String, AddressDto> adresses;
    @Deprecated // ClientCategory
    private Map<String, ClientCategoryDto> clientCategories;
    private ServiceClassDto serviceClass;
    private String className;
    private LegalFormDto legalForm;
    private EmployeeDto employee;
    private String lastName;
    private String firstName;
    private String middleName;
    private String gender;
    private LocalDate birthday;
    private ClientTypeDto clientType;
    private ClientDto parent;
    private AddressDto postAddress;
    private AddressDto lawAddress;
    private AddressDto deliveryAddress;
    private ClientCategoryDto clientCategory;
    private ClientCategoryDto clientCategorySub;
    private ClientCategoryDto clientCategoryMacro;
    private SystemInfoDto systemInfo;
    private DeliveryInfoDto deliveryInfo;
    private TrippingDisabledReasonDto trippingDisabledReason;
    private ProprietaryFormDto proprietaryForm;
    private DocumentTypeDto documentType;
    private BillingGroupDto billingGroup;

    private SettlementCentreDto settlementCentre;

    private ClientClassDto clientClass;
    private ContractDto contract;
    private String okved;
    private String okpo;
    private String ogrn;
    private String docNumber;
    private String birthPlace;
}
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Builder
@Table(name = "CLIENT")
public class Client {
    @EmbeddedId
    private EntityId id;
    @Column(name = "DTYPE")
    private String dtype;
    @Column(name = "JURIDICALTYPE")
    private String juridicalType;
    @Column(name = "NLS")
    private String nls;
    @Column(name = "NLSADDITIONAL")
    private String nlsAdditional;
    @Column(name = "INN")
    private String inn;
    @Column(name = "KPP")
    private String kpp;
    @Column(name = "TITLE")
    private String title;
    @Column(name = "SHORTNAME")
    private String shortName;
    @Column(name = "JURIDICALNAME")
    private String juridicalName;
    @Column(name = "EMAIL")
    private String email;
    @Column(name = "PHONE")
    private String phone;
    @Column(name = "VIP")
    private Boolean isVip;
    @Column(name = "ISSPECIAL")
    private Boolean isSpecial;
    @Column(name = "CHANGEDATE")
    private LocalDateTime changeDate;
    @Column(name = "SETTLEMENTACCOUNT")
    private String settlementAccount;
    @Column(name = "BIK")
    private String bik;
    @Column(name = "PASSPORT")
    private String passport;
    @Column(name = "CONTACT")
    private String contact;
    @Column(name = "COMPANYURL")
    private String companyUrl;
    @Column(name = "INETSYSTEMCODE")
    private String inetSystemCode;
    @Column(name = "INCLUDETODEBTOR")
    private Boolean includeToDebtor;
    @Column(name = "EXCLUDEFROMINFORM")
    private Boolean excludeFromInform;
    @Column(name = "DELIVERYAREA")
    private String deliveryArea;
    @Column(name = "FLDFILIALNAME")
    private String fldFilialName;
    @Column(name = "FLDDOCUMENTUNID")
    private String fldDocumentUnId;
    @Column(name = "FLDCLIENTATTRIBUTES")
    private String fldClientAttributes;
    @Column(name = "LASTNAME")
    private String lastName;
    @Column(name = "FIRSTNAME")
    private String firstName;
    @Column(name = "MIDDLENAME")
    private String middleName;
    @Column(name = "GENDER")
    private String gender;
    @Column(name = "BIRTHDAY")
    private LocalDate birthday;

    @Column(name = "BIRTHPLACE")
    private String birthPlace;
    @Column(name = "OKVED")
    private String okved;
    @Column(name = "OKPO")
    private String okpo;
    @Column(name = "OGRN")
    private String ogrn;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "PARENT_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "PARENT_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "PARENT_VERSION", referencedColumnName = "VERSION")})
    private Client parent;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "DEPARTMENT_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "DEPARTMENT_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "DEPARTMENT_VERSION", referencedColumnName = "VERSION")})
    private Department department;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "OWNERFILIAL_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "OWNERFILIAL_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "OWNERFILIAL_VERSION", referencedColumnName = "VERSION")})
    private Department ownerFilial;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "SETTLEMENTTYPE_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "SETTLEMENTTYPE_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private SettlementType settlementType;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CLIENTCLASSB2B_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CLIENTCLASSB2B_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private ClientClassB2B clientClassB2B;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "POSTADDRESS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "POSTADDRESS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "POSTADDRESS_VERSION", referencedColumnName = "VERSION")})
    private Address postAddress;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "LAWADDRESS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "LAWADDRESS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "LAWADDRESS_VERSION", referencedColumnName = "VERSION")})
    private Address lawAddress;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "DELIVERYADDRESS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "DELIVERYADDRESS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "DELIVERYADDRESS_VERSION", referencedColumnName = "VERSION")})
    private Address deliveryAddress;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CC_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CC_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private ClientCategory clientCategory;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CCS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CCS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private ClientCategory clientCategorySub;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CCM_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CCM_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private ClientCategory clientCategoryMacro;
    @OneToMany(mappedBy = "client")
    private List<Contract> contracts;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "SERVICECLASS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "SERVICECLASS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "SERVICECLASS_VERSION", referencedColumnName = "VERSION")})
    private ServiceClass serviceClass;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "MANAGER_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "MANAGER_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "MANAGER_VERSION", referencedColumnName = "VERSION")})
    private Employee employee;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "LEGALFORM_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "LEGALFORM_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "LEGALFORM_VERSION", referencedColumnName = "VERSION")})
    private LegalForm legalForm;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CLIENTTYPE_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CLIENTTYPE_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private ClientType clientType;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "TDR_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "TDR_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private TrippingDisabledReason trippingDisabledReason;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "BILLINGGROUP_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "BILLINGGROUP_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID")})
    private BillingGroup billingGroup;
    private SettlementCentre settlementCentre;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "PROPRIETARYFORM_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "PROPRIETARYFORM_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "PROPRIETARYFORM_VERSION", referencedColumnName = "VERSION")})
    private ProprietaryForm proprietaryForm;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "CLIENTCLASS_APP_PKID", referencedColumnName = "APP_PKID"),
            @JoinColumn(name = "CLIENTCLASS_LOCALSYSTEMID", referencedColumnName = "LOCALSYSTEMID"),
            @JoinColumn(name = "CLIENTCLASS_VERSION", referencedColumnName = "VERSION")})
    private ClientClass clientClass;

    @Embedded
    private SystemInfo systemInfo;
}

共有1个答案

薄哲
2023-03-14

这是MapStruct中一个已知的bug。以set开头的Fluent setter删除了开始的set,因此settlementdate变为tlementdate。这就是为什么当删除Lombok@builder时,它可以工作,然后它在对象上使用getters/setter,而不是在构建器上使用getters/setters。

您可以跟踪mapstruct/mapstruct#1799的问题。

 类似资料:
  • 我在一起使用mapstruct和lombok时遇到了一些问题: 我的实体和实体类: EntityMapper: 在这种配置中,它会导致编译时错误。所以我试图注释掉@映射注释。它编译了,但它将所有属性映射为空。MapSTRtEntityMapper生成的实现: 我找到了几个关于注释处理器的答案,但看看我的构建。gradle文件: 如果我编译时不使用@Mapping注解,然后使用这个注解运行,有时它会

  • 我有一个相当简单的映射器 我的域类: 我的DTO类: 我在mvn干净安装上收到的错误: [错误]/C:/code报告/work/github/symphony票证/src/main/java/com/ticket/mappers/TicketLocationDetailsMapper。java:[33,48]结果类型TicketLocationDetails中的未知属性“locationId”。你

  • 我的代码: 我的错误: 回溯(最近一次调用last):文件“C:\Users\weqwwg\Desktop\python\Game.py”,第77行,在driver.manage().timeouts()中。隐式等待(10,时间单位:秒);AttributeError:“WebDriver”对象没有属性“manage” 我正在尝试向youtube上的评论框发送密钥。我删除了一些代码,我目前正在运行

  • 问题内容: 使用@jit装饰器运行代码时出现错误。似乎无法找到函数scipy.special.gammainc()的某些信息: 没有@jit装饰器,代码将正常运行。也许需要一些使scipy.special模块的属性对Numba可见的东西? 在此先感谢您的任何建议,评论等。 问题答案: 问题在于这不是Numba固有的一小部分函数(请参阅http://numba.pydata.org/numba- d

  • 我在尝试使用JAXB封送时遇到以下异常。 以下是堆栈跟踪: 键入AORAGENT2TTWSREQUEST。JAVA 我参考了下面的链接,仍然不知道到底是什么问题: JAXB非法注释例外

  • 我正在使用和,在属性映射期间我遇到了这个错误,我该如何修复它? 她的是我的 这里有一个Screenshottenter图像描述