3

我正在尝试掌握新的RequestFactory API 并度过一段非常艰难的时光。

我的域模型由 a Staffer、 aPerson和a 组成Office。Staffer 有一个 Person 和一个 Office 作为字段。

当我尝试将更新保存到 GWT 中的 Staffer 实例时,在服务器端persist()调用中,我在其原始/字符串字段中看到了更新,但我没有看到对附加对象PersonOffice对象的更新。以下是我如何影响 GWT 方面的编辑:

private void persistStafferDetails()
{
    CRMRequestFactory.StafferRequest stafferRequest = requestFactory.stafferRequest();
    staffer = stafferRequest.edit(staffer);

    PersonProxy person = staffer.getPerson();
    person.setFirstName(firstNameField.getText());
    person.setLastName(lastNameField.getText());

    staffer.setPersonalEmail(personalEmailField.getText());
    staffer.getHomeLocation().setStreetAddress(addressField1.getText());
    staffer.getHomeLocation().setCity(cityField.getText());
    staffer.getHomeLocation().setPostalCode(postalField.getText());
    staffer.getHomeLocation().setProvince(provinceDropDown.getValue(provinceDropDown.getSelectedIndex()));

    stafferRequest.persist().using(staffer).fire();
}

以下是代理:

@ProxyFor(Staffer.class)
public interface StafferProxy extends EntityProxy
{
    Long getId();

    PersonProxy getPerson();
    void setPerson(PersonProxy person);

    OfficeProxy getOffice();
    void setOffice(OfficeProxy office);

    String getHomePhone();
    void setHomePhone(String homePhone);

    String getCellPhone();
    void setCellPhone(String cellPhone);

    String getPersonalEmail();
    void setPersonalEmail(String personalEmail);

    LocationProxy getHomeLocation();
    void setHomeLocation(LocationProxy homeLocation);
}

@ProxyFor(Person.class)
public interface PersonProxy extends EntityProxy
{
    Long getId();
    void setId(Long id);

    String getFirstName();
    void setFirstName(String firstName);

    String getLastName();
    void setLastName(String lastName);
}


@ProxyFor(Office.class)
public interface OfficeProxy extends EntityProxy
{
    Long getId();

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

我的 CRMRequestFactory 看起来像:

public interface CRMRequestFactory extends RequestFactory
{
  @Service(Staffer.class)
    public interface StafferRequest extends RequestContext
    {
        InstanceRequest<StafferProxy, Void> persist();
        Request<List<StafferProxy>> getAll();
        Request<StafferProxy> findStaffer(Long id);
    }
    public StafferRequest stafferRequest();

    @Service(Person.class)
    public interface PersonRequest extends RequestContext
    {
        InstanceRequest<PersonProxy, Void> persist();
        Request<List<PersonProxy>> getAll();
        Request<PersonProxy> findPerson(Long id);
    }
    public PersonRequest personRequest();

    @Service(Office.class)
    public interface OfficeRequest extends RequestContext
    {
        InstanceRequest<OfficeProxy, Void> persist();
        Request<List<OfficeProxy>> getAll();
        Request<OfficeProxy> findOffice(Long id);
    }
    public OfficeRequest officeRequest();

}
4

1 回答 1

3

RequestFactory 不会将该persist()方法视为任何特殊的方法,因此您必须自己实现链式持久化或配置您的 ORM 系统来为您完成。要检查的另一件事是,如果多次调用findPerson()and方法,则返回 Person 或 Office 对象的相同对象实例。findOffice()如果您EntityManager在传入 HTTP 请求的整个生命周期中使用相同的(或系统的等效项),通常可以解决非平凡有效负载图的“丢失更新”问题。

一篇关于链式持久性的博客文章和一个带有简短讨论的问题跟踪链接。

如果这没有帮助,您能否发布您的域对象findFoo()persist()方法的示例?

于 2011-02-12T15:46:41.197 回答