我有一个非常直接的 Web 服务,它返回从数据库检索的对象。我使用 spring-data-jpa 存储库来获取实体,之后,我返回对象而不进行任何修改。
我在实体中有几个延迟加载的关系,并且希望将它们保留为“未获取”。但是,当 Web 服务编码(marshal)响应对象时,它会触发延迟获取并对数据库进行其他调用。
在某些情况下我仍然需要延迟获取数据,因此我需要能够动态地从 Hibernate 的控制中分离/删除/取消代理该对象。
我尝试使用 following method取消代理该对象,但没有任何运气(我的实体似乎不是 HibernateProxy 对象)。
“un-ORMify”实体的最佳方法是什么,以便我可以自由地操作/序列化对象而不触发数据调用。
最佳答案
我发现数据传输对象 (DTO) 通常与实体对象有不同的要求,因此我只编写自定义 DTO 对象。构造函数通常是一个实体对象,它只是复制它需要的初始化字段。那么就不存在延迟初始化异常,并且另一方得到的不包括未使用的字段。恕我直言,比试图破解整个代理的东西要好得多。
有用的链接:Difference between Transfer objects and Domain objects
关于java - 取消代理 JPA 实体以进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192511/