Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

354
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!