gpt4 book ai didi

java - Mapstruct 问题 : Unknown property error, 但存在属性

转载 作者:行者123 更新时间:2023-12-04 06:44:30 29 4
gpt4 key购买 nike

我正在使用:

  • spring-boot 2.1.5.RELEASE
  • mapstruct 1.3.0.Final
  • Lombok 1.18.8

  • 我正在尝试映射两个对象,Model 和 DTO:
  • DTO ClientDto - 作为依赖项从 nesux 存储库获取
  • 模特客户

  • 在两个类中都有一个属性结算中心,但在编译时我收到一个错误(toDto 方法):
    error: Unknown property "settlementCentre" in result type ru.rt.eip.boot.domain.ClientDto. Did you mean "null"?

    但是如果我直接在我的项目中创建类 ClientDto(而不是作为依赖项),编译就没有问题。

    令人惊讶的是,但 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);
    }

    DTO - 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;
    }

    最佳答案

    这是 MapStruct 中的一个已知错误。以 set 开头的 Fluent setter有起点set如此删除 settlementDate变成 tlementDate .这就是为什么当 Lombok @Builder被删除它可以工作,然后在对象上使用 getter/setter 而不是构建器。

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

    关于java - Mapstruct 问题 : Unknown property error, 但存在属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56559136/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com