我有一个服务器和客户端,它们都是基于 Java 的,并且通过 RMI 相互通信。服务器的数据访问层是用 JPA 和 Hibernate 实现的,实体通常用作参数。
客户端没有 Hibernate 代码并且动态代码下载被禁用,因此当服务器向其客户端发送实体时,必须发送实际实体,而不是代理。此外,实体必须按原样发送,而不预先加载所有延迟获取的属性,因为在大多数情况下客户端永远不需要它们。
是否可以使用 Hibernate 实现这些要求?
我知道的唯一干净的方法(即不获取对象的每个关联)是使用单独的对象层进行数据传输。
或者,您可以发送由您重新填充的具有必要数据的相同对象类型,而不是使用代理集来休眠对象。
您可以获取查询中的所有属性
来自文档
如果您正在使用属性级别的惰性获取(使用字节码检测),则可以强制 Hibernate 立即使用 fetch all properties 在第一个查询中获取惰性属性。
from Document fetch all properties order by name
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
或在您的映射中使用 eagle fetch ...