Tengo una gran cantidad de entidades que amplían la entidad del Catalog y también tengo muchas d en esa medida CatalogDto
Y tengo un repositorio genérico, un servicio y un mapeador de la siguiente manera
Mi repositorio:
@Repository public interface CatalogRepository<T extends Catalog> extends JpaRepository<T, Integer>{ }mi servicio:
@Service @Transactional public class CatalogServiceImpl<T extends Catalog,Dto extends CatalogDto>{ private final Logger log = LoggerFactory.getLogger(CatalogServiceImpl.class); private final CatalogRepository<T> repository; private CatalogMapper<T,Dto> catalogMapper=new CatalogMapper<T,Dto>() {}; public CatalogServiceImpl(CatalogRepository<T> repository) { this.repository = repository; } }Mi Mapeador:
public abstract class CatalogMapper<T extends Catalog,Dto extends CatalogDto> implements Rapper<T,Dto> { @Override public Dto entityToDto(T entity) { return null; } @Override public T dtoToEntity(Dto dto) { return null; } } Quiero crear un objeto de T en el método dtoToEntity y un objeto de Dto en el método entityToDto en la clase CatalogMapper
Creo que estos dos métodos deberían ser abstractos porque cada mapeador probablemente funciona de manera diferente. De todos modos, puede proporcionar una implementación base como esta
public T dtoToEntity(Dto dto) throws InstantiationException, IllegalAccessException { T entity = (T) ((Class)((ParameterizedType)this.getClass(). getGenericSuperclass()).getActualTypeArguments()[0]).newInstance(); BeanUtils.copyProperties(dto, entity); return entity; } public Dto entityToDto(T entity) throws InstantiationException, IllegalAccessException { Dto dto = (Dto) ((Class)((ParameterizedType)this.getClass(). getGenericSuperclass()).getActualTypeArguments()[1]).newInstance(); BeanUtils.copyProperties(entity, dto); return dto; }Usando el tipo parametrizado de la clase genérica, puede crear una nueva instancia y luego ejecutar una copia simple de propiedades.