No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Java Spring

Curso de Java Spring

Alejandro Ram铆rez

Alejandro Ram铆rez

Mapear el dominio de compras

28/35
Recursos

Aportes 14

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Un atajo de teclado muy 煤til para copiar r谩pidamente l铆neas de c贸digo es ctrl+d

Con respecto a MapStruct desde java 8 en adelante no es necesario usar la anotaci贸n @Mappings (No afecta si se usa):

Ejm:
Pasamos de esto (CategoryMapper):

@Mappings({
            @Mapping(source = "idCategoria", target = "categoryId"),
            @Mapping(source = "descripcion", target = "category"),
            @Mapping(source = "estado", target = "active")
})
Category toCategory(Categoria categoria);

a esto:

@Mapping(source = "idCategoria", target = "categoryId")
@Mapping(source = "descripcion", target = "category")
@Mapping(source = "estado", target = "active")
Category toCategory(Categoria categoria);

y no afecta su funcionamiento de las dos maneras funciona.

Les quiero comentar que tuve un problema con la actualizaci贸n de lo siguiente:

@Mapping(source = 鈥減roductos鈥, target = 鈥渋tems鈥 ),
(al autocompletar luego de cambiar item por items INTELLIJ no actualizaba el auto completar con ITEMS tuve que volver a la clase Purchase.java y quitar el m茅todo y volver a generar el getter an setter algo paso con el INTELLIJ. Por si a alguien mas le pasa para que pueda saber como solucionarlo. 馃槂

Cuando hacemos el ignore de producto, agregamos en la etiqueta Mapper uses={ProductMapper.class}, pero tambi茅n hacemos ignore de compra, no deber铆amos agregar tambi茅n PurchaseMapper en uses ?

Para los que vienen siguiendo paso a paso el ejemplo, en los campos de ComprasProducto que tienen relaciones, no habiamos creado los getters y setters. Me di cuenta porque no me autocompletaba MapStruct dentro de target

Yo uso Lombok para evitar escribir los getter and setter, esto es una buena practica?

En la clase destino siempre deben hacerse todos los mappings, si no se tienen todos los atributos mapeados, se tienen que ignorar expl铆citamente

Si tiene un error que dice

Unknown property 鈥渃ompra鈥 in result type ComprasProducto. Did you mean 鈥渢otal鈥?

  • Es porque en la clase ComprasProductos.java tienen que agregar los setters and getters que faltan

隆Excelente!

El agregar una lista en un Optional se considera un Code Smell, debido a que si no hay datos nos regresa una lista vac铆a.

@Mapper(componentModel = "spring", uses = {PurchaseItemMapper.class})
public interface PurchaseMapper {

    @Mappings({
            @Mapping(source = "idCompra", target = "purchaseId"),
            @Mapping(source = "idCliente", target = "clienteId"),
            @Mapping(source = "fecha", target = "date"),
            @Mapping(source = "medioPago", target = "paymentMethod"),
            @Mapping(source = "comentario", target = "comment"),
            @Mapping(source = "estado", target = "state"),
            @Mapping(source = "productos", target = "items"),
    })
    Purchase toPurchase(Compra compra);
    List<Purchase> toPurchases(List<Compra> compras);

    @InheritInverseConfiguration
    @Mappings({
            @Mapping(target = "cliente", ignore = true)
    })
    Compra toCompra(Purchase purchase);
}
@Mapper(componentModel = "spring", uses = {ProductMapper.class})
public interface PurchaseItemMapper {

    @Mappings({
            @Mapping(source = "id.idProducto", target = "productId"),
            @Mapping(source = "cantidad", target = "quantity"),
            @Mapping(source = "total", target = "total"),
            @Mapping(source = "estado", target = "active")
    })
    PurchaseItem toPurchaseItem(ComprasProducto producto);

    @InheritInverseConfiguration
    @Mappings({
            @Mapping(target = "compra", ignore = true),
            @Mapping(target = "producto", ignore = true),
            @Mapping(target = "id.idCompra", ignore = true)
    })
    ComprasProducto toComprasProducto(PurchaseItem purchaseItem);
}

Excelente todo hasta ahora

Me pueden ayudar con este error?
Property 鈥減roductId鈥 has no write accessor in PurchaseItem
Unknown property 鈥渃lientId鈥 in result type Purchase
No property named 鈥渃lientId鈥 exists in source parameters
Unmapped target property 鈥渋dCliente鈥

Mi codigo es

package com.Cesar_Market.persistence.mapper;

import com.Cesar_Market.domain.PurchaseItem;
import com.Cesar_Market.persistence.entity.ComprasProductos;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;

@Mapper(componentModel = "spring", uses = {ProductMapper.class})
public interface PurchaseItemMapper {

    @Mappings({
            @Mapping(source = "id.idProducto", target = "productId"),
            @Mapping(source = "cantidad", target = "quantity"),
            @Mapping(source = "estado", target = "state")
    })
    PurchaseItem toPurchaseItem(ComprasProductos producto);

    @InheritInverseConfiguration
    @Mappings({
            @Mapping(target = "compra", ignore = true),
            @Mapping(target = "producto", ignore = true),
            @Mapping(target = "id.idCompra", ignore = true)
    })
    ComprasProductos toComprasProducto(PurchaseItem item);
}```



package com.Cesar_Market.persistence.mapper;

import com.Cesar_Market.domain.Purchase;
import com.Cesar_Market.persistence.entity.Compra;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;

import java.util.List;

@Mapper(componentModel = 鈥渟pring鈥, uses = {PurchaseItemMapper.class})
public interface PurchaseMapper {

@Mappings({
        @Mapping(source = "idCompra", target = "purchaseId"),
        @Mapping(source = "idCliente", target = "clientId"),
        @Mapping(source = "fecha", target = "date"),
        @Mapping(source = "medioDePago", target = "paymentMethod"),
        @Mapping(source = "comentario", target = "comment"),
        @Mapping(source = "estado", target = "state"),
        @Mapping(source = "comprasProductos", target = "items")
})
Purchase toPurchase(Compra compra);
List<Purchase> toPurchases(List<Compra> compras);

@InheritInverseConfiguration
@Mapping(target = "cliente", ignore = true)
Compra toCompra(Purchase purchase);

}