Skip to content

Compiler errors due to wrong mapper generation #372

Open
@egvimo

Description

@egvimo

Overview of the issue

Generating the app with Mapstruct leads to wrong mappings for some entitites. Which in turn leads to compiler errors.

Reproduce the error

JDL
application {
    config {
    baseName sample
    packageName sample
    applicationType microservice
    authenticationType oauth2
    serverPort 8081
    buildTool gradle
    cacheProvider no
    clientFramework no
    databaseType sql
    prodDatabaseType postgresql
    devDatabaseType postgresql
    serviceDiscoveryType no
    enableTranslation false
    messageBroker kafka
    skipClient true
    skipUserManagement true
  }
  entities *
  dto * with mapstruct
}

entity ParentEntity {
  parentRequiredField String required
}

entity ChildEntity {
  childField String
}

relationship ManyToOne {
  ChildEntity{user(login) required} to User
}

relationship OneToMany {
  ParentEntity{child} to ChildEntity{parent(parentRequiredField) required}
}

Generating with the above JDL produces the following Mapper:

ChildEntityMapper
@Mapper(componentModel = "spring")
interface ChildEntityMapper :
    EntityMapper<ChildEntityDTO, ChildEntity> {

    @Mappings(
        Mapping(target = "user", source = "user", qualifiedByName = ["userLogin"]), Mapping(target = "parent", source = "parent", qualifiedByName = ["parentEntityParentRequiredField"])
    )
    override fun toDto(s: ChildEntity): ChildEntityDTO

    @Named("userLogin")
    @BeanMapping(ignoreByDefault = true)

    @Mappings(
        Mapping(target = "id", source = "id"), Mapping(target = "login", source = "login")
    )
    fun toDtoUserLogin(user: User): UserDTO

    @Named("parentEntityParentRequiredField")
    @BeanMapping(ignoreByDefault = true)

    @Mappings(
        Mapping(target = "id", source = "id"), Mapping(target = "login", source = "login"), Mapping(target = "parentRequiredField", source = "parentRequiredField")
    )
    fun toDtoParentEntityParentRequiredField(parentEntity: ParentEntity): ParentEntityDTO
}

The last function toDtoParentEntityParentRequiredField has a mapping annotation for the login field. But the parent entity does not have this field.

KHipster Version(s)

v1.16.0

  • Checking this box is mandatory (this is just to show you read everything)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions