如何在mapstruct中未加载惰性字段时跳过调用getter方法以避免LazyInitializationException?

时间:2018-02-02 19:58:47

标签: jpa mapstruct

如果在将JPA实体映射到DTO的mapstruct映射器中未加载惰性字段时,如何跳过调用getter方法?

我正在使用JPA EntityGraph来加载method1所需的子实体,但是method2我正在使用不同的EntityGraph而我并不想为每种情况创建不同的映射器。

有没有办法为两个方法创建一个映射器并忽略延迟加载的属性?

1 个答案:

答案 0 :(得分:0)

您可以有两种方法进行相同的映射,而另一种方法可以忽略未初始化的字段

abstract Personne toDtoV1(PersonneModel model);

@Mapping(target = "nom", ignore = true)
abstract Personne toDtoV2(PersonneModel model);

或者如果仅需要一个方法,则创建一个可以延迟加载的所有字段的映射,并忽略,然后在映射后的方法中检查是否已加载关系并自己进行映射

@Mapping(target = "nom", ignore = true)
abstract Personne toDtoV2(PersonneModel model);

@AfterMapping
void afterpersonneModel(PersonneModel dto, @MappingTarget Personne mode){
    //check if relation is loaded
    ///and make the mapping
}