I use Long
我的实体中的 ids 不仅将它们存储在数据存储中,而且还引用其他实体。现在,我使用 RequestFactory 在客户端上 create() 对象并保留它们,但我需要一种方法来找出服务器生成的 id。
这是我发现的一种需要两次旅行的方法:
final OrganizationProxy proxy = context.create(OrganizationProxy.class);
context.persist().using(proxy).fire(new Receiver<Void>(){
public void onSuccess(Void response)
{
requestFactory.find(proxy.stableId()).fire(new Receiver<OrganizationProxy>()
{
public void onSuccess(OrganizationProxy response)
{
//hey, now response has the server-generated id in it, along with any other values the server populated
}
});
}
});
但好像有must是一种无需第二趟即可获取持久 id 的方法。看起来 requestFactory.find() 首先需要持久 id 才能工作。
如何在不向服务器发出第二次请求的情况下获取持久 ID?
=======更新=======
我终于想到了(在tbroyer之后;)) 我可以退回Long
来自 RequestContext 中的 persist() 方法的 id。这不会从EntityProxyId
,但它确实让我在单个请求中获得了新对象的持久 ID。
我将保留这个问题 - 我仍然对从 EntityProxyId 中获取持久 id 感兴趣。
您可以通过调用获取 EntityProxyId 的字符串表示形式RequestFactory.getHistoryToken() http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/requestfactory/shared/RequestFactory.html#getHistoryToken%28com.google.gwt.requestfactory.shared.EntityProxyId%29。这可以转换回EntityProxyId
通过致电RequestFactory.getProxyId() http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/requestfactory/shared/RequestFactory.html#getProxyId%28java.lang.String%29.
用 RequestFactory 的话说,新创建的实体的 id 是“短暂的”。临时 id 仅在实例内有效RequestFactory
创造了RequestContext
用于创建EntityProxy
。当。。。的时候RequestContext
被触发并且所有方法调用都已被服务器处理,SimpleRequestProcessor
将检查有效负载的临时对象,如果它们已被持久化,则生成的有效负载将使用从返回的值更新客户端的状态getId()
method.
对象的同一性和平等性EntityProxyId
当它从短暂状态切换到持久状态时不会改变,但其关联的历史令牌会改变:
OrganizationProxy proxy = context.create(OrganizationProxy.class);
final EntityProxyId<?> id = proxy.stable();
String ephemeralString = factory.getHistoryToken(id);
context.persist().using(proxy).fire(new Receiver<Void>() {
public void onSuccess(Void response) {
String persistedString = factory.getHistoryToken(id);
assert !ephemeralString.equals(persistedString);
assert factory.getProxyId(ephemeral) == factory.getProxyId(persistedString);
MyRequestFactory otherFactory = GWT.create(MyRequestFactory.class);
assert factory.getProxyId(ephemeral) != otherFactory.getProxyId(ephemeral);
// Throws IllegalArgumentException
otherFactory.find(otherFactory.getProxyId(ephemeral));
}
});
在上面的演示中,一旦你有了persistedString
,您可以将值存储在 cookie 或其他客户端持久性机制中,并在稍后重新创建 id 以便在调用时使用RequestFactory.find()
。第二个和第三个断言展示了临时 id 的“范围”。短暂和持久形式可以与RequestFactory
创建了该对象。如果临时 ID 与新创建的实例一起使用RequestFactory
(如果临时 ID 被标记为书签,则会发生这种情况History
令牌),你会得到一个EntityProxyId
,但它实际上不能用于任何有用的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)