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

2024-01-27

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

如果需要的话,可以了解更多详细信息:

http://www.mojavelinux.com/blog/archives/2006/06/hibernate_get_out_of_my_pojo/ http://www.mojavelinux.com/blog/archives/2006/06/hibernate_get_out_of_my_pojo/

http://www.gwtproject.org/articles/using_gwt_with_hibernate.html http://www.gwtproject.org/articles/using_gwt_with_hibernate.html

吉利德(Gilead)是我发现的唯一对此有效的药物,但它已不再存在。


是的,您可以使用 MapStruct 来做到这一点。但是,只能通过明确标记要映射的内容和要忽略的内容。

假设你有这样的课程:

public class Car {

    private String name;
    private int year;
    //This is lazy loaded
    private List<Wheel> wheels;
    //getters and setters omitted for simplicity
}

public class Wheel {
    private boolean front;
    private boolean right;
    //getters and setters omitted for simplicity
}

您将需要一个如下所示的映射器:

@Mapper
public interface CarMapper {

    @Mapping(target="wheels", ignore=true)
    Car mapWithoutWheels(Car car);

    Car mapWithWheels(Car car);

    List<Wheel> map(List<Wheel> wheels);

    Wheel map(Wheel wheel);
}

显式映射为List<Wheel> and Wheel如果您想强制 MapStruct 创建新对象而不进行直接映射,则需要。目前,如果 MapStruct 发现源类型和目标类型相同,它会直接赋值(对于列表,它将创建一个新列表,但不会在列表元素中调用 getter)。

If Wheel有一些延迟加载的元素,那么你可以有两种映射方法Wheel你将不得不使用根据资格选拔 http://mapstruct.org/documentation/1.1/reference/html/index.html#selection-based-on-qualifiers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapStruct 可以对 Hibernate 实体类进行深度代理吗 的相关文章

随机推荐

  • 我应该使用 process.nextTick

    我正在尝试了解何时使用 process nextTick 下面我使用异步库来控制我的代码流 并想知道我是否应该在最终回调中调用 nextTick async parallel function callback do something c
  • 如何在golang中获取重定向url而不是页面内容?

    我正在向服务器发送请求 但它返回一个网页 有没有办法获取网页的 url package main import fmt io ioutil net http func main req err http NewRequest GET htt
  • 将应用程序升级到 iOS 7 - 错误“在 6.0 之前的 iOS 版本上自动布局”(但希望 iOS 7 不旧)

    我有一个 iOS 应用程序 可以在所有 iOS 6 设备上正常运行 我最近将 xcode 升级到了 5 0 版本 并尝试在 iPhone 5 上为 iOS 7 构建相同的应用程序 在构建应用程序时 xCode 升级了代码设置中的某些内容 但
  • Laravel 队列错误不允许序列化“Illuminate\Http\UploadedFile”

    我正在尝试使用 laravel 中的队列 bean 上传文件 但出现此错误 不允许序列化 Illuminate Http UploadedFile 我的代码是 protected file protected Id public funct
  • 如何完全清除所有 matplotlib 图的内存

    我有一个数据分析模块 其中包含调用的函数matplotlib pyplotAPI 多次 每次运行最多生成 30 个数字 这些数字在生成后会立即写入磁盘 因此我需要将它们从内存中清除 目前 在每个函数结束时 我都会 import matplo
  • IplImage 结构的 boost 序列化问题

    我无法让 boost 序列化模块与 OpenCV 的 IplImage 结构一起使用 这是我用于序列化 IplImage 的代码 以及自定义结构中的一些 JSON 数据 template
  • Google Play 应用内结算版本 3 购买的服务器端验证(第 2 部分)

    所以我想我了解了应用内计费和服务器端验证的工作原理 这要归功于对我之前的问题 https stackoverflow com questions 16067180 server side verification of google pla
  • Conda gcc 不会取代系统 gcc

    我正在尝试在 Conda 环境中编译一些代码 我在其中 之前安装了编译包gcc linux 64 然而 即使在停用并再次重新激活环境之后 gcc还是 usr bin gcc 我应该怎么做才能让 Conda 按预期工作 即 使用该工具 我安装
  • 在matlab中计算列相关性的快速方法是什么

    我有两个非常大的矩阵 60x25000 我想仅计算两个矩阵之间的列之间的相关性 例如 corrVal 1 corr mat1 1 mat2 1 corrVal 2 corr mat1 2 mat2 2 corrVal i corr mat1
  • 我想我发现了一个“不存在的单子”

    我发现 Haskell 的一个奇怪的特性让我相信我的思考方式是错误的 我认为在Haskell中 应该有一些 不存在的 单子 这是因为以下原因 Prelude gt return 1 1 Prelude gt return 1 gt gt x
  • 是否可以将一列引用为多个外键?

    I have few tables and I want to reference one column from PDF table to multiple other tables 例如 如果 PDF 表格select输出看起来像这样
  • 使用 C++ 数组中出现次数最多的元素?

    我尝试过以下代码来获取数组中出现次数最多的元素 它运行良好 但唯一的问题是 当有两个或多个元素具有相同的出现次数并且等于最多出现的元素时 它只显示扫描的第一个元素 请帮助我解决这个问题 include
  • 用自定义激活替换 sigmoid 激活

    我正在尝试用分段线性函数替换 Keras sigmoid 函数 定义如下 def custom activation 4 x if x lt 6 return 0 elif x gt 6 and x lt 4 return 0 0078 x
  • 使用仅 getter 自动属性显式实现接口(C# 6 功能)

    使用自动属性进行显式接口实现在 C 5 中是不可能的 https stackoverflow com a 3905035 1565070 但现在 C 6 支持仅 getter 自动属性 http www c sharpcorner com
  • 如何等待2秒?

    如何导致执行延迟指定的秒数 这不这样做 WAITFOR DELAY 00 02 正确的格式是什么 的文档WAITFOR http msdn microsoft com en us library ms187331 aspx没有明确规定所需的
  • 如何使用python列出Kafka消费者组

    我想用 python 获取 Kafka 消费者组列表 但我不能 我使用zookeeper python客户端 kazoo 但消费者组列表为空 因为此方法适用于旧消费者 而我们不使用旧消费者 如何使用python代码获取消费者组列表 kafk
  • std::mutex::lock 阻塞 CPU 使用

    我希望能够随意冻结和解冻线程 我目前的解决方案是通过回调和忙等待睡眠来完成的 这显然不是一个最优解 我正在考虑让主线程锁定互斥体 然后让从属线程运行一个锁定和解锁同一互斥体的函数 我担心的是 如果是真正的繁忙等待 可能会占用 CPU 资源
  • IsAssignableFrom() 在应该返回 true 时返回 false

    我正在开发一个加载指定文件夹中包含的 dll 的插件系统 然后 我使用反射来加载程序集 迭代它们包含的类型并识别任何实现我的程序集IPlugin界面 我正在使用类似于以下的代码进行检查 foreach Type t in myTypes i
  • 在 ExtendScript for Illustrator 中执行外部脚本

    Summary 有没有办法使用execute 函数将参数传递给Python脚本 并让Python脚本在执行时使用该参数 然后将结果返回给ExtendScript 语境 我正在为 Illustrator 构建一个脚本 该脚本必须查询 Web
  • MapStruct 可以对 Hibernate 实体类进行深度代理吗

    对于想要直接返回实体类的 Web 服务开发人员来说 这是一个常见问题 即使加载了我需要的所有数据 仍然有许多我不需要的未初始化的代理和集合 我希望他们只返回 null 而不是抛出延迟加载异常 基本上我只想要 POJO 合约 但是必须清除代理