mapstruct / mapstruct/mapstruct
@SubclassMapping selecting implementation class based on source field value
Ninguém assumiu esta issue ainda.
- 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
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- 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