gpt4 book ai didi

java - 延迟初始化此集合时返回空集合

转载 作者:行者123 更新时间:2023-12-05 05:40:39 26 4
gpt4 key购买 nike

我有这个对象:

实体

@Entity
public class someClass{
private String name;
private String labelKey;

@ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE}, fetch = FetchType.LAZY)
private Set<Product> products = new HashSet<>();
}

DTO

public class someClass{
private String name;
private String labelKey;
private Set<Product> products = new HashSet<>();
}

我的问题是,当我得到这个对象但产品被延迟初始化时,当我使用 Dozer 将实体映射到 DTO 时,我得到一个 LaziInitializedException,然后我想得到它,当我得到延迟初始化的产品时,这个产品将返回一个空集。这可能吗?

感谢您的宝贵时间,对不起我的英语,这不是我的母语。

最佳答案

正如您在本教程中看到的那样 here您可以指示 dozer 从映射中排除某些字段。

如果这样做,dozer 将不会调用实体类的 getProducts 方法,因此不会抛出异常 LaziInitializedException

同时,因为您的 DTO 对象是用空的 HashSet 为现场产品初始化的,所以这将保留在 DTO 的末尾。

因此您的要求将起作用,其中您的实体为产品延迟初始化并且您的 DTO 返回一个空列表,同时从 dozer 发生映射。

这是 dozer 映射器所需的配置。

BeanMappingBuilder mappingExclusion = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(SomeClassEntity.class, SomeClassDto.class).exclude("products");
}
};
mapper = new DozerBeanMapper();
mapper.addMapping(mappingExclusion);

然后你可以用它来做如下的映射

mapper.map(someClassEntityInstance, someClassDtoInstance);

关于java - 延迟初始化此集合时返回空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72366092/

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