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

时间:2013-07-12 16:24:37

标签: java hibernate jpa

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

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

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

2 个答案:

答案 0 :(得分:0)

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

来自docs

  

如果您正在使用属性级延迟提取(使用字节码检测),则可以使用fetch all属性强制Hibernate立即在第一个查询中获取延迟属性。

from Document fetch all properties order by name

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

或在您的映射中使用eagle fetch ...

答案 1 :(得分:0)

我所知道的唯一清洁方式(即没有获取对象的每个关联)是使用单独的对象层进行数据传输。

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