MapStruct可以对Hibernate实体类进行深度去代理吗

MapStruct可以对Hibernate实体类进行深度去代理吗,hibernate,mapstruct,Hibernate,Mapstruct,对于希望直接返回实体类的web服务开发人员来说,这是一个常见问题。即使加载了我需要的所有数据,仍然有许多我不需要的未初始化代理和集合。我希望它们只返回null,而不抛出延迟加载异常。基本上我只想要POJO契约,但是必须清除代理和hibernate集合才能得到它(除非hibernate中有一些我不知道的新方法)。我可以使用MapStruct来执行此操作吗 如有需要,请提供更多详细信息: Gilead是我发现的唯一一个对此很有效的东西,但它已经不存在了。是的,您可以使用MapStruct来实现这

对于希望直接返回实体类的web服务开发人员来说,这是一个常见问题。即使加载了我需要的所有数据,仍然有许多我不需要的未初始化代理和集合。我希望它们只返回null,而不抛出延迟加载异常。基本上我只想要POJO契约,但是必须清除代理和hibernate集合才能得到它(除非hibernate中有一些我不知道的新方法)。我可以使用MapStruct来执行此操作吗

如有需要,请提供更多详细信息:


Gilead是我发现的唯一一个对此很有效的东西,但它已经不存在了。

是的,您可以使用MapStruct来实现这一点。但是,只有明确标记要映射的内容和要忽略的内容

假设你有这样的课程:

公车{
私有字符串名称;
私人国际年;
//这是惰性加载
私有列表轮;
//为简单起见,省略了getter和setter
}
公共级车轮{
私有布尔前沿;
私权;
//为简单起见,省略了getter和setter
}
您将需要一个如下所示的映射器:

@Mapper
公共接口卡马佩尔{
@映射(target=“wheels”,ignore=true)
不带高跟鞋的汽车地图(汽车);
带轮子的汽车地图(汽车);
列表地图(列表轮);
车轮地图(车轮);
}
如果要强制MapStruct创建新对象而不进行直接映射,则需要使用
列表
控制盘
的显式映射。当前,如果MapStruct看到源和目标类型相同,它将直接赋值(使用列表,它将创建一个新列表,但不会调用列表元素中的getter)


如果
Wheel
有一些延迟加载的元素,那么您可以使用两种方法来映射
Wheel
,并且您必须使用我同意这是一种有点手工操作的方法。但是,如果您知道如何改进它,您可以创建一个问题,我在
1.1.0.Final上测试了类似的东西,但看起来不起作用。您能详细说明什么不起作用吗?你有什么?如果您认为这是一个bug,请在上打开一个问题,如果它与此问题不同,可能需要一个新的问题有没有办法多次@Mapper(对于许多延迟加载的字段)?如果您使用延迟加载,那么这个答案值得一看