通过RequestFactory更新多个实体

时间:2011-10-17 09:53:00

标签: java gwt requestfactory

我有一个包含产品和专家的GWT应用程序,一个产品可以有多个专家(OneToMany关系)。我使用两个相关的实体混合和组合请求时遇到了一些麻烦:

ProductProxy如下所示:

@ProxyFor(myapplication.server.domain.Product.class)
public interface ProductProxy extends EntityProxy {

    Long getId();

    public String getName();
    public void setName(String name);

    [...]

    EntityProxyId<ProductProxy> stableId();

    Set<ExpertProxy> getExperts();
}

我有一个可以编辑产品的Dialog,所以它可以:

ProductProxy selectedProduct; // This comes from a function that delivered all products
productRequest = MyAplication.getRequestFactory().productRequest();
this.product = productRequest.edit(selectedProduct);

编辑产品时,您还可以向此产品添加专家:

@ProxyFor(myapplication.server.domain.Expert.class)

public interface ExpertProxy extends EntityProxy {
    public Long getId();
    public void setId(Long id);

    public ProductProxy getProduct();
    public void setProduct(ProductProxy product);
    [...]
}

我有一个单独的DialogBox出现。在此对话框中,我尝试使用在作为参数传递之前编辑的产品创建专家:

expertRequest = MyApplication.getRequestFactory().expertRequest();
ExpertProxy expert = expertRequest.create(ExpertProxy.class);
expert.setProduct(product); // product comes from the productRequest code

如果我尝试这样做,我在执行 setProduct 时会出错,因为来自productRequest的请求与来自expertRequest的请求混合在一起。

解决此问题的最佳方法是什么?我可以通过原始productRequest添加专家吗?我应该从产品中获取ID并仅在我的专家请求中使用此ID吗?或者我应该添加特定的服务器功能来向产品添加专家?或者有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

是的,您应该对所有编辑/创建使用相同的RequestContext实例。

每个RequestContext在服务器上累积操作(代理上调用的新代理和设置者)和调用(服务方法调用)重放。这些都是fire()批量发送的。因此,您必须使用与添加ExpoertProxy的{​​{1}}相同的RequestContext创建ProductProxy