mapstruct / mapstruct/mapstruct
@SubclassMapping selecting implementation class based on source field value
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Java
- Estrellas
- 7.7k
- Forks
- 1.1k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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
@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:
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:
@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")
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comience examinando cómo se procesa @SubclassMapping para el mapper ContactEntity-to-Contact descrito en el issue, incluido el comportamiento de MapStruct 1.5.5.Final. La implementación debe permitir seleccionar BusinessContact o NaturalPersonContact a partir de la propiedad del tipo fuente e incluir cobertura para ese mapping generado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java, kotlin
- Área
- tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 30/100