【问题标题】:How to skip calling the getter method when the lazy field was not loaded in mapstruct to avoid LazyInitializationException?mapstruct中未加载惰性字段时如何跳过调用getter方法以避免LazyInitializationException?
【发布时间】:2018-02-02 19:58:47
【问题描述】:

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

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

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

【问题讨论】:

标签: jpa mapstruct


【解决方案1】:

您可以有两种方法来制作相同的映射,一种方法是忽略未初始化的字段

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
}

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多