mapstruct / mapstruct/mapstruct
@SubclassMapping selecting implementation class based on source field value
Personne n'a encore pris cette issue.
- Langage dominant
- Java
- Étoiles
- 7.7k
- Forks
- 1.1k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
### 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")
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par examiner comment @SubclassMapping est traité pour le mapper ContactEntity-to-Contact décrit dans l’issue, y compris le comportement de MapStruct 1.5.5.Final. L’implémentation doit permettre de sélectionner BusinessContact ou NaturalPersonContact à partir de la propriété du type source et inclure une couverture pour ce mapping généré.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, kotlin
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 30/100