MapStruct가 내 개체의 모든 JPA 참조를로드하는 문제를 해결하려고합니다 (FetchType.LAZY로 지정되어 있음에도 불구하고).Mapstruct 생성 된 매핑에 필터 함수 적용
나는 '매퍼'에게 '매터드'에 대한 메소드를 추가했다. '매퍼'는 '사용 된'매퍼에 대한 게터가 실제로 필요하기를 원하는 메소드를 제외하고 각 메소드마다 '호출'된다. 내가 만든 메소드
default <T> T checkIt(T o) {
return o;
}
와 내가 사용하고 매핑 방법에 대해 다음과 같이 생성 된 코드는 다음과 같습니다 : 당신이 볼 수 있듯이
customerOrderDto.setStartDate(checkIt(customerOrder.getStartDate()));
customerOrderDto.setEndDate(checkIt(customerOrder.getEndDate()));
customerOrderDto.setCustomer(customerDtoMapper.toDto(customerOrder.getCustomer()));
customerOrderDto.setTopology(topologyDtoMapper.toDto(customerOrder.getTopology()));
는, 그것은 그것을 생성 다음과 같이 최고 수준의 매퍼에 인터페이스 클래스이다 처음 두 (시작일 & 시작) b 다른 두 (고객 & 토폴로지)에 대해 자체 mappers가 정의되어 있고 (이 매퍼에 의해 사용됨) 호출하지 않습니다.
'get'을 수행하는 각 메소드에 대해 MapStruct를 호출 할 수있는 방법이 있습니까?
각 .get() 메서드를 래핑 할 수 있다면 엔티티가 아직로드되었는지 확인할 기회가 있어야하며 @JsonView 뷰 매핑을 사용하여 필터링 할 수도 있습니다.
답장을 보내 주셔서 감사합니다. MapStruct가 JPA 참조를로드하지 않는다는 것을 알고 있습니다. 단지 특정 유스 케이스를 정의하는 것이 었습니다. 그 시점에서 다른 매퍼에 검사를 추가하는 것은 너무 늦었습니다. "getCustomer()"메서드를 호출하는 행위는 이미 Javassist 프록시를 호출하여 데이터베이스에서 항목을로드하고이를 이해하고 있습니다. @BeforeMapping 옵션도 배제하십시오. 정말로 좋은 점은 실제 생성되는 부분이 "toDto (myFunc (oDest, fDest,() -> customerOrder.getCustomer()))"가되는 지점에 도달 할 수 있다는 것입니다. –
... 또한 대상 필드를 검사하여 JsonView 주석이 있는지 확인하고 전달 된 컨텍스트 (현재 MapStruct와 관련된 다른 문제)를 기반으로 필터링 할 수 있습니다.myFunc는 myFunc (Object oDest, Field fDest, Callable getter)로 정의해야합니다. 여기서 (a) Javassist 프록시가 초기화되었는지 여부 (JPA 유즈 케이스 1)와 null을 반환하는지 확인합니다. (b) check JsonView 주석의 대상 필드 및 필요한보기 (JsonView 유스 케이스 2) 집합에없는 경우 null을 반환합니다 ... –
... 개체를 반환하려면 원할 경우 "return getter.call(); ". MapStruct 코드베이스는 크기가 커서 변경 사항을 찾는 데 도움이 될 수있는 곳을 누군가가 지적 할 수 있다면 좋습니다. 감사. –