mapstruct / mapstruct/mapstruct

@SubclassMapping selecting implementation class based on source field value

Aberta
#3,365 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

feature
Linguagem predominante
Java
Estrelas
7.7k
Forks
1.1k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

### Use case

It is common practice saving multiple sub-classes into one database tables. E.g.:
I have a db entity Contact with type field value
```kotlin
@Entity
@Table(name = CONTACTS_TABLE)
open class ContactEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long = 0

@Column(name = CONTACT_TYPE_COLUMN, nullable = false)
var type: ContactType = ContactType.BUSINESS
}
```
My domain model Contact is abstract and can have two implementations: BusinessContact and NaturalPersonContact:
```kotlin
sealed interface Contact {
val id: Long
}

data class BusinessContact(
override val id: Long,
val businessName: String,
) : Contact

data class NaturalPersonContact(
override val id: Long,
val firstName: String,
val lastName: String,
) : Contact
```
Trying to define a Mapper with `@SubclassMapping` has no option to add logic to it based on type property:
```kotlin
@SubclassMapping(target = BusinessContact::class, source = ContactEntity::class)
@SubclassMapping(target = NaturalPersonContact::class, source = ContactEntity::class)
fun entityToDomainModel(entity: ContactEntity): Contact
```

### Generated Code

_No response_

### Possible workarounds

None known

### MapStruct Version

implementation("org.mapstruct:mapstruct:1.5.5.Final")

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece examinando como @SubclassMapping é processado para o mapper ContactEntity-to-Contact descrito na issue, incluindo o comportamento do MapStruct 1.5.5.Final. A implementação deve permitir selecionar BusinessContact ou NaturalPersonContact com base na propriedade do tipo de origem e incluir cobertura para esse mapping gerado.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
java, kotlin
Domínio
tooling
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
30/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.