我有一个基于Java的服务器和客户端,并通过RMI相互通信。服务器的数据访问层使用JPA和Hibernate实现,实体通常用作参数。
客户端没有Hibernate代码并禁用动态代码下载,因此当服务器向其客户端发送实体时,必须发送实际实体,而不是代理。此外,实体必须按原样发送,而不预先加载所有延迟获取的属性,因为在大多数情况下客户端永远不会需要它们。
是否可以使用Hibernate实现这些要求?
答案 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)
我所知道的唯一清洁方式(即没有获取对象的每个关联)是使用单独的对象层进行数据传输。
或者,您可以使用必要的数据发送由您重新填充的相同对象类型,而不是使用代理集设置的休眠对象。