java - 取消代理 JPA 实体以进行序列化

标签 java jpa

我有一个非常直接的 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/

相关文章:

java - 在不打开命令提示符的情况下在 JAVA 中运行 .BAT 文件

java regex Matcher提取匹配之间的文本

java - 如何将类名、运行方法名和对象字段传递给AspectJ或其他拦截器?

java - Spring + hibernate : Inserting mutliple records and @Transactional

hibernate - 如何从jpa中具有多对多关系的joinable中删除记录

java - 使用 XLedger 的 SOAP/WSDL 接口(interface)时遇到问题

java - EntityManager.merge 没有做任何事情

hibernate - 使用 Hibernate 在 Wildfly 上使用 JPA 创建表失败

oracle - 每个表的 : single global sequence vs. 序列哪个更好?

java - 在 JPA 中,EntityManager.refresh() 对于禁用的缓存有用吗