Hibernate GWT请求工厂值代理关系
假设我有一个数据库,类型为Hibernate GWT请求工厂值代理关系,hibernate,gwt,orm,requestfactory,Hibernate,Gwt,Orm,Requestfactory,假设我有一个数据库,类型为a和BA是一个EntityProxy,它包含B的列表,而B是一个ValueProxy。我使用GWT的RequestFactory按id查询A。当我使用RequestFactory查询A时,我可以访问B列表,如下所示:A.getB(),因为B是一个“值代理” 问题:B列表是在我查询A时实际查询并下载到客户端的,还是仅在我调用getB()时才查询并下载到客户端的?没有延迟加载:如果你只要求A(因为你没有在请求中使用.with(“B”)),你要求“A with Bs”,你会得
a
和B
A
是一个EntityProxy
,它包含B
的列表,而B
是一个ValueProxy
。我使用GWT的RequestFactory按id查询A
。当我使用RequestFactory查询A
时,我可以访问B
列表,如下所示:A.getB()
,因为B
是一个“值代理”
问题:
B
列表是在我查询A
时实际查询并下载到客户端的,还是仅在我调用getB()
时才查询并下载到客户端的?没有延迟加载:如果你只要求A(因为你没有在请求中使用.with(“B”)
),你要求“A with Bs”,你会得到“A with Bs”,你只会得到A,以后你必须要B
将其视为最不出人意料的原则
请注意,从数据库获取Bs(您用Hibernate、JPA和ORM标记了问题,所以…)是另一回事。这取决于您如何管理EntityManager会话和JPA实体的生命周期。很可能是从数据库加载Bs,即使它们没有被发送到客户端。使用(字符串)
是否同时使用值代理和实体代理?在我看来,谷歌的文档并不清楚为什么你要使用值代理而不是实体代理。.with()
仅用于实体代理。根据定义,ValueProxy没有标识,因此仅传输其中的一部分将意味着丢失一些数据(因此所有数据都会被发送)。使用EntityProxy,您可以在不同的时间点从同一个实体请求不同的字段(因为它是可识别的)(显然,如果在同一时间更新了该实体,它们可能来自该实体的不同版本)。只有EntityProxy可以部分加载,对于实体,只有不同的更改才能从客户端发送到服务器。