Java 在序列化期间从实体中删除代理代码

Java 在序列化期间从实体中删除代理代码,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个基于Java的服务器和客户端,它们通过RMI相互通信。服务器的数据访问层是用JPA和Hibernate实现的,实体通常用作参数 客户端没有Hibernate代码,动态代码下载被禁用,因此当服务器向其客户端发送实体时,必须发送实际实体,而不是代理。此外,实体必须按原样发送,而不预加载所有延迟获取的属性,因为在大多数情况下,客户端永远不需要这些属性 是否可以使用Hibernate实现这些要求?您可以获取查询中的所有属性 来自文档 如果您使用的是属性级别的延迟获取(使用字节码检测),那么可以强

我有一个基于Java的服务器和客户端,它们通过RMI相互通信。服务器的数据访问层是用JPA和Hibernate实现的,实体通常用作参数

客户端没有Hibernate代码,动态代码下载被禁用,因此当服务器向其客户端发送实体时,必须发送实际实体,而不是代理。此外,实体必须按原样发送,而不预加载所有延迟获取的属性,因为在大多数情况下,客户端永远不需要这些属性


是否可以使用Hibernate实现这些要求?

您可以获取查询中的所有属性

来自文档

如果您使用的是属性级别的延迟获取(使用字节码检测),那么可以强制Hibernate在第一个查询中立即使用fetch all properties获取延迟属性


或者在映射中使用eagle fetch…

我知道的唯一干净的方法(即不获取对象的每个关联)是使用单独的对象层进行数据传输


或者,您可以发送由您重新填充的相同对象类型和必要的数据,而不是使用代理集来休眠对象。

也许这会有所帮助:@Korgen谢谢,但getHibernateLazyInitializer()是否预取所有引用的实体?从API中我看到,您必须调用initialize方法来获取它们()我的工作可能对你有用。
from Document fetch all properties order by name