【问题标题】:RequestFactory's Entity RelationshipsRequestFactory 的实体关系
【发布时间】:2013-08-29 00:34:47
【问题描述】:

我对@9​​87654325@ 中RequestFactoryRequest with() 实现的细节有点不清楚。在此处查看the official documentation

问题 1:

查询服务器时,RequestFactory 不会自动 在对象图中填充关系。为此,请使用 with() 请求上的方法并将相关的属性名称指定为字符串。

这是否意味着如果服务器上的Entity 使用Lazy Fetching,则返回的EntityProxy 将具有with() 中指定的所有请求对象?实例化 Object server 端的整个对象图,只发送一小块给客户端,似乎有点奇怪。

问题 2:

req.with("foo").with("foo");做同样的事情 req.with("foo"); ?

问题 3:

req.with("foo").with("bar");做同样的事情 req.with("foo","bar"); ?

注意:我很难在源代码中找到 with() 的实现细节,API 也对我没有帮助。

【问题讨论】:

    标签: gwt request requestfactory gwt2


    【解决方案1】:

    问题一:

    这可能取决于您的服务器端实现。 with 调用只会确保在 RF 调用返回客户端之前不久调用相应的 getter (getFoo())。

    这就是为什么您还必须确保使用OpenSessionInView 模式的原因,否则您可能会遇到NullPointeterExceptions。

    问题2:

    我猜Request<T> 实现了构建器模式。 最终结果将是相同的。 但是我不确定getter() 是否会被调用两次,或者with 方法是否会检查getter 是否已经被请求。

    问题3:

    是的,它是一样的。

    作为旁注。您可以使用req.with("foo.bar")。 在后端,这将导致getFoo().getBar() 调用。

    【讨论】:

    • 关于第一个问题,考虑后端运行 NoSQL 数据库且没有预加载工具的情况,例如:MongoDB。可以轻松地将对象图存储在那里,并快速在 java 对象中获得完整的图。如果客户端在没有任何 with() 调用的情况下请求该对象(通过代理),我会在客户端拥有完整的对象图吗?如果理解正确,因为不需要额外的 getter 来填充对象图。
    • 也许有人可以指出Request的实现文档? gwtproject.org/javadoc/latest/com/google/web/bindery/… 好像没有
    • @Ümit:对于 Q2 和 Q3,答案是肯定的,并且 property referencesSet,因此不能有重复(也不能重复调用服务器端的getter)
    • @GWT4Ever:RF 不关心你的域对象的行为,它只看到它的 getter 和 setter。如果一个proxy的getter类型是另一个proxy,那么需要在客户端使用with()获取属性;您的基础字段(或其他)是否已经填充或延迟填充并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多