gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:42:23 25 4
gpt4 key购买 nike

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

假设我们有以下实体。

@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的最佳方法,因为我正在获取他们的惰性。

编辑:解决方案

假设您有以下数据模型

public class User{

private String name;

//... other fields

@OneToMany
private Set<Address> addresses;
}
  • 不带地址的查询,异常:从模型映射到DTO时,它将尝试映射addresses,但是由于延迟加载(通过 hibernate 或任何其他框架)将异常结束。

  • 另外,您可以忽略 addresses的映射,例如@MehmetBektaş。但是不需要定义 source,它是可选的。

    @Mapping(target = "addresses", ignore = true)
  • 获取关系:这就是这种方式。添加一个join来查询addresses,Mapstruct将完成其余的工作。
  • 最佳答案

    您可以使用Mapstruct进行映射时延迟加载所需的所有实体(假设 session 仍处于 Activity 状态)。您可以使用ignore批注忽略不需要的卸载代理。此处有更多详细信息。
    Can MapStruct do a deep deproxy of Hibernate Entity Classes

    关于hibernate - 如何在Mapstruct中管理延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015481/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com