Spring Boot : 프로그래밍 방식으로 PersistentBag 가져 오기 비활성화
Spring Boot에 다음과 같은 엔티티가 있습니다.
@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;
}
내 서비스에는 이미 raceclass의 모든 항목을 추가로 가져 오는 하나의 메서드가 있습니다. 다음과 같이 보입니다.
public List<RaceClassDto> getClassesEntries( int eventDbid )
{
return this.raceClassRepo.findByEventDbid( eventDbid )
.stream()
.map( c -> addEntriesToRaceClass( eventDbid, c ) )
.map( raceClassMapper :: mapToDto )
.collect( Collectors.toList() );
}
매퍼는 다음과 같습니다.
public RaceClassDto mapToDto( RaceClass raceClass )
{
return modelMapper.map ( raceClass, RaceClassDto.class );
}
이제 항목을 자동으로 가져 오지 않는 두 번째 방법이 필요합니다. 그러나 정확히 여기에 내 문제가 있습니다. 새로운 방법은 다음과 같습니다.
public List<RaceClassDto> getClasses( int eventDbid )
{
return this.raceClassRepo.findByEventDbid( eventDbid )
.stream()
.map( raceClassMapper :: mapToDto )
.collect( Collectors.toList() );
}
그러나 그럼에도 불구하고 항목은 가져옵니다. getEntries ()는 DTO-Mapper에서 호출되어 자동으로 선택 쿼리를 실행하고 항목 컨테이너를 채 웁니다. getClassesEntries () 메서드에 대해서만 PersistentBag의 자동 동기화를 프로그래밍 방식으로 비활성화하는 방법은 무엇입니까?
답변
프로그래밍 방식으로 관계 해결을 비활성화 할 수 없다고 생각합니다.
더 나은 접근 방식은 매퍼에서 새 메서드를 정의하고 이름을으로 지정하고 mapToDTOWithoutResolvingEntries
해당 메서드에서 관계를 해결하지 않는 것입니다.
귀하의 의견에 대해 ModelMapper를 사용하는 경우 특정 사용 사례에서 DTO 의 속성을 건너 뛸 수 있습니다 entries
.
다음과 같이 시도하십시오.
public RaceClassDto mapToDTOWithoutResolvingEntries( RaceClass raceClass) {
return modelMapperWithoutResolvingEntries
.map ( raceClass, RaceClassDto.class );
}
어디 modelMapperWithoutResolvingEntries
동일 modelMapper
다음과 함께 이전에 정의 된 mapping
추가 :
ModelMapper modelMapperWithoutResolvingEntries = new ModelMapper();
modelMapperWithoutResolvingEntries
.addMappings(mapper -> mapper.skip(RaceClassDto::setEntries));
TypeMap대신 create a 를 사용할 수 있으며 동일하게 작동해야합니다.
다른 대안이 있습니다. 예를 들어 직접 제공하거나 PropertyMap
(관련 javadoc 및 configure
메서드 를 덮어 쓰는 방법을 참조하십시오 ) Converter.
나는 ModelMapper 라이브러리modelMapper
에서 온 것이라고 생각 하므로이 경우이 질문 에서 설명한 대로 항목 매핑을 건너 뛰도록 말할 수 있습니다.
그렇지 않으면 JPA로드 된 객체의 데이터를 느리게 가져온 데이터를 제외한 다른 객체로 복사 할 수 있습니다.