【问题标题】:GWT RequestFactory ValueProxy RelationsGWT RequestFactory ValueProxy 关系
【发布时间】:2011-11-19 02:02:16
【问题描述】:

假设我有一个数据库,类型为 ABAEntityProxy,其中包含 B 的列表,BValueProxy。我使用GWT的RequestFactory通过id查询A。当我使用 RequestFactory 查询A 时,我可以像这样访问B 的列表:A.getB(),因为B 是一个“ValueProxy”。

问题:B 列表是在我查询A 时实际查询并下载到客户端的,还是仅在我调用getB() 时才被查询并下载到客户端?

【问题讨论】:

    标签: hibernate gwt orm requestfactory


    【解决方案1】:

    没有延迟加载:你要求“A 和 Bs”,你得到“A 和 Bs”,如果你只要求 A(因为你没有在你的 Request 上使用 .with("b")),你'只会得到A,你以后必须要Bs。

    将其视为最不意外的原则

    请注意,从您的数据库中获取 B(您使用 Hibernate、JPA 和 ORM 标记了问题,所以...)是另一回事。这取决于您如何管理 EntityManager 会话和 JPA 实体的生命周期。 B 很可能是从数据库中加载的,即使它们没有被发送到客户端。

    【讨论】:

    • with(String) 是否适用于值和实体代理? IMO,Google 的文档并不清楚为什么您要使用值代理而不是实体代理。
    • .with() 仅用于实体代理。根据定义,ValueProxy 没有身份,因此仅传输其中的一部分意味着您会丢失一些数据(因此始终会发送所有数据)。使用 EntityProxy,您可以在不同的时间点从同一实体请求不同的字段(因为它是可识别的)(显然,您可能让它们来自不同的版本实体,如果它同时被更新)。只有 EntityProxy 可以部分加载,并且对于实体,只有更改的差异从客户端发送到服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多