我正在处理与数据库中延迟加载的对象相关的问题。
假设我们有以下实体。
@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
,但因为延迟加载(通过休眠或任何其他框架)最终会出现异常。
此外,您可以忽略addresses
被映射的,如 @Mehmet Bektaş 。但是不需要定义source
,它是可选的。
@Mapping(target = "addresses", ignore = true)
- 获取关系:就是这样。添加一个
join
来查询addresses
和 Mapstruct 将完成其余的工作。