Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

357
Vistas
Spring Boot: deshabilite la recuperación de PersistentBag programáticamente

Tengo una entidad en Spring Boot que se ve así:

 @Entity @Table(name = "race_class") @Getter @Setter public class RaceClass { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer dbid; private String name; private String colorHexcode; @OneToMany(fetch = FetchType.LAZY, mappedBy = "raceClass", cascade = CascadeType.ALL) private List<Entry> entries; }

En mi servicio ya tengo un método, que extrae todas las entradas de la clase de carrera adicionalmente. Que se parece a eso:

 public List<RaceClassDto> getClassesEntries( int eventDbid ) { return this.raceClassRepo.findByEventDbid( eventDbid ) .stream() .map( c -> addEntriesToRaceClass( eventDbid, c ) ) .map( raceClassMapper :: mapToDto ) .collect( Collectors.toList() ); }

El mapeador se ve así:

 public RaceClassDto mapToDto( RaceClass raceClass ) { return modelMapper.map ( raceClass, RaceClassDto.class ); }

Ahora, quiero tener un segundo método, que no obtenga las entradas automáticamente. Pero exactamente aquí está mi problema. El nuevo método se vería así:

 public List<RaceClassDto> getClasses( int eventDbid ) { return this.raceClassRepo.findByEventDbid( eventDbid ) .stream() .map( raceClassMapper :: mapToDto ) .collect( Collectors.toList() ); }

Sin embargo, las entradas se recuperarán, ya que se llamará a getEntries() en DTO-Mapper, que ejecuta las consultas de selección automáticamente y llena el contenedor de entradas. ¿Cómo es posible deshabilitar mediante programación la sincronización automática de PersistentBag solo para el método getClassesEntries()?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Creo que no puede deshabilitar mediante programación la resolución de la relación.

Un mejor enfoque será definir un nuevo método en su asignador, asígnele el nombre mapToDTOWithoutResolvingEntries y no resuelva la relación en ese método.

Para sus comentarios, si está utilizando ModelMapper, en su caso de uso específico, tal vez pueda omitir la propiedad de entries de su DTO.

Por favor, intente algo como lo siguiente:

 public RaceClassDto mapToDTOWithoutResolvingEntries( RaceClass raceClass) { return modelMapperWithoutResolvingEntries .map ( raceClass, RaceClassDto.class ); }

Donde modelMapperWithoutResolvingEntries es el mismo modelMapper que definiste antes con la siguiente mapping agregada:

 ModelMapper modelMapperWithoutResolvingEntries = new ModelMapper(); modelMapperWithoutResolvingEntries .addMappings(mapper -> mapper.skip(RaceClassDto::setEntries));

Puede usar crear un TypeMap en su lugar, debería comportarse de la misma manera.

Tienes otras alternativas. Por ejemplo, puede proporcionar su propio PropertyMap (consulte eljavadoc relevante y cómo sobrescriben el método de configure ), o tal vez incluso unConverter .

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que modelMapper proviene de la biblioteca ModelMapper , por lo que, en este caso, podría indicarle que omita el mapeo de las entradas, como se indica en esta pregunta .

De lo contrario, probablemente pueda copiar los datos del objeto JPA cargado en otro objeto, excluyendo los datos obtenidos de forma perezosa.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda