GWT RequestFactory不持久附加实体

时间:2011-02-11 19:59:24

标签: java gwt requestfactory

我正试图抓住新的RequestFactory API,并度过了非常艰难的时期。

我的域模型包含StafferPersonOffice。员工有一个人和一个办公室作为领域。

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

Office

以下是代理:

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();
}

我的CRMRequestFactory看起来像:

@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);
}

1 个答案:

答案 0 :(得分:3)

RequestFactory不会将persist()方法视为特殊内容,因此您必须自己实现链式持久性,或者配置ORM系统为您执行此操作。要检查的另一件事是,如果多次调用,findPerson()findOffice()方法将返回Person或Office对象的同一对象实例。如果在传入的HTTP请求的整个生命周期中使用相同的EntityManager(或系统的等效项),那通常会处理非平凡有效负载图的“缺失更新”问题。

blog post关于链式持久性和问题tracker link,并进行简短讨论。

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