如何在Mapstruct中管理延迟加载?

时间:2016-03-15 15:26:13

标签: hibernate lazy-loading java-ee-7 mapstruct

我正在处理与数据库中延迟加载的对象相关的问题。

假设我们有以下实体。

@Entity(name = "User")
@Table(name = "USERS")
public class User{
    @Id
    @GeneratedValue
    private int id

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="NOTES_ID")
    private List<Note> notes;
}

而Dto将是

@Mapper
public interface UserDtoMapper{

    /** the INSTACE HERE **/

    User fromDto(UserDto dto);

    UserDto toDto(User user);

}

因此,这可能是获取所有用户而不会产生EJBException的最佳方法,因为我正在提取它们的懒惰?

2 个答案:

答案 0 :(得分:0)

您可以使用Mapstruct来延迟加载所需的所有实体(假设会话仍处于活动状态)。使用ignore注释可以忽略您不想要的已卸载代理。更多细节在这里。 Can MapStruct do a deep deproxy of Hibernate Entity Classes

答案 1 :(得分:0)

您可以使用忽略选项。

 @Mapping(source = "user.id", target = "userId", ignore = true)

但是以这种方式,您无法映射诸如渴望获取类型的关系字段。